Προγραμματισμός Η/Υ
Περιεχόμενα
Προγραμματισμός Η/Υ¶
Τμήμα: Μηχανικών Χωροταξίας, Πολεοδομίας και Περιφερειακής Ανάπτυξης
Τίτλος Επιστημονικού Πεδίου: Πληροφορική και Ανάλυση Δεδομένων
Κωδικός Μαθήματος: ΜΕ0200
Τίτλος Μαθήματος: Προγραμματισμός Η/Υ
Κατηγορία Μαθήματος: Επιλογής
Εξάμηνο: Εαρινό
Περίγραμμα του μαθήματος¶
Το μάθημα εισάγει τους φοιτητές στις βασικές έννοιες και αρχές του προγραμματισμού και είναι προσαρμοσμένο στις ανάγκες και στο υπόβαθρο των χωροτακτών. Στόχος του μαθήματος είναι να αποκτήσουν οι φοιτητές τις αναγκαίες γνώσεις για την επεξεργασία και ανάλυση δεδομένων, την αυτοματοποίηση διαδικασιών και την σύνταξη σεναρίων (scripts) για την αναπαραγωγισιμότητα της ερευνάς τους. Πέρα από τις βασικές αρχές προγραμματισμού η διδασκαλία επεκτείνεται σε εξειδικευμένες θεματικές ενότητες που αφορούν τα γεωχωρικά δεδομένα και την ανάλυσή τους μέσω προγραμματισμού. Η διδασκαλία θα στηριχθεί στην Python, μια σύγχρονη, ευρέως διαδεδομένη και υψηλού επιπέδου γλώσσα προγραμματισμού. Επιπλέον, όπου κριθεί αναγκαίο, θα επιδειχτούν συμπληρωματικά διαδικασίες με την γλώσσα προγραμματισμού R.
Το πρόγραμμα των διαλέξεων καθώς και η προτεινόμενη βιβλιογραφία παρατίθενται στην συνέχεια.
1. Εισαγωγή στον προγραμματισμό¶
Ενότητες του μαθήματος¶
Το μάθημα χωρίζεται στις ακόλουθες ενότητες:
1. Εισαγωγή στον προγραμματισμό¶
Κατά την διάρκεια της διάλεξης διευκρινίζεται ο σκοπός του μαθήματος και περιγράφονται συνοπτικά οι ενότητες που θα διδαχθούν οι φοιτητές κατά την διάρκεια του εξαμήνου. Διατυπώνονται συγκεκριμένοι ορισμοί που αφορούν τον προγραμματισμό Η/Υ και αναπτύσσονται έννοιες για την επιστήμη των υπολογιστών. Στην συνέχεια εγκαθίσταται στους υπολογιστές των φοιτητών η γλώσσα προγραμματισμού Python μαζί με το απαραίτητο λογισμικό για την συγγραφή και αποσφαλμάτωση του κώδικα. Ακολουθεί εξοικείωση με το περιβάλλον εργασίας.
2. Τιμές, τύποι και μεταβλητές¶
Περιγραφή της έννοιας των μεταβλητών, των σταθερών, τύποι δεδομένων, εκχώρηση τιμών στις μεταβλητές, κανόνες ονοματοδοσίας των μεταβλητών.
3. Εκφράσεις, τελεστές¶
Ορισμός εκφράσεων, τι είναι τελεστές, ποια είναι η προτεραιότητα των τελεστών, πως εισάγουμε σχόλια στον κώδικα και γιατί είναι σημαντική πρακτική.
4. Έλεγχος ροής εκτέλεσης¶
Η λογική Boolean, Εκτέλεση υπό συνθήκη, αλυσιδωτές και εμφωλευμένες συνθήκες, βρόχος και οι εντολές επανάληψης for και while.
5. Συναρτήσεις¶
Ορισμός και κλήση συνάρτησης, παράμετροι συναρτήσεων, εμβέλεια μεταβλητών, αναδρομή.
6. Συμβολοσειρές/Δομές Δεδομένων¶
Προσπέλαση συμβολοσειρών, χαρακτήρες διαφυγής, υποσύνολα συμβολοσειράς, συγκρίσεις και ιδιότητες, μέθοδοι συμβολοσειρών. Λίστες, Πλειάδες, Λεξικά.
7. Ανάγνωση & εγγραφή αρχείων, φάκελοι¶
Ανάγνωση και εγγραφή σε αρχείο, σειριοποίηση (serialization) αντικειµένου, διαχείριση φακέλων και αρχείων.
8. Πίνακες και διαγράμματα¶
Ανάγνωση αρχείων csv ή excel, pandas dataframes
9. Πίνακες και διαγράμματα¶
Πίνακες στην βιβλιοθήκη numpy, διαγράμματα με την βιβλιοθήκη seaborn.
10. Γεωεπεξεργασία διανυσματικών δεδομένων¶
Ανάγνωση και εγγραφή διανυσματικών δεδομένων, μετα-δεδομένα, φιλτράρισμα, αλλαγή προβολικού συστήματος.
11. Ανάλυση διανυσματικών δεδομένων¶
Χωρικές σχέσεις, στατιστικά ομαδοποιήσεων, οπτικοποίηση διανυσματικών δεδομένων.
12. Γεωεπεξεργασία ψηφιδωτών δεδομένων¶
Ανάγνωση και εγγραφή διανυσματικών δεδομένων, μετα-δεδομένα, ορισμός μάσκας/αποκοπή περιοχής, αλλαγή τιμών, επαναταξινόμηση, αλλαγή προβολικού συστήματος.
13. Ανάλυση ψηφιδωτών δεδομένων¶
Άλγεβρα ψηφιδωτών αρχείων, στατιστικά ζωνών, ιστόγραμμα συχνοτήτων.
Ορισμοί¶
Definition 1
«Αλγόριθμο» ονομάζουμε κάθε πεπερασμένη και αυστηρά καθορισμένη σειρά βημάτων (οδηγιών) για την επίλυση ενός προβλήματος. [Aγγελιδάκης, 2015]
Ένας αλγόριθμος είναι μια αυστηρά καθορισμένη διαδικασία που λαμβάνει μια τιμή ή ένα σύνολο τιμών εισόδου και αποδίδει μια ή περισσότερες τιμές εξόδου. Είναι κατά συνέπεια μια ακολουθία υπολογιστικών βημάτων που μετατρέπει την είσοδο δεδομένων σε έξοδο αποτελεσμάτων [Cormen, 2009].
Για παράδειγμα η αύξουσα (ή φθίνουσα) ταξινόμηση μιας λίστας αριθμών είναι ένα χαρακτηριστικό παράδειγμα αλγορίθμου. Οπότε με τιμές εισόδου {31, 41, 59, 26, 41, 58}, ο αλγόριθμος ταξινόμησης επιστρέφει ως τιμές εξόδου {26, 31, 41, 41, 58, 59}.
Definition 2
Ως «Πρόγραμμα» ορίζεται ένας αλγόριθμος γραμμένο σε γλώσσα κατανοητή για τον υπολογιστή και περιέχει εντολές (οδηγίες) που κατευθύνουν με κάθε λεπτομέρεια τον υπολογιστή, για να εκτελέσει μια συγκεκριμένη εργασία και να επιλύσει ένα πρόβλημα [Aγγελιδάκης, 2015]. Ένα Πρόγραμμα αναγνώσιμο από τον άνθρωπο ονομάζεται «πηγαίος κώδικας».
Definition 3
«Προγραμματισμός» ονομάζεται η διαδικασία συγγραφής προγραμμάτων και περιλαμβάνει τη διατύπωση των κατάλληλων εντολών προς τον υπολογιστή με τη χρήση τεχνητών γλωσσών, των γλωσσών προγραμματισμού [Aγγελιδάκης, 2015].
Ο προγραμματισμός είναι μια διαδικασία που απαιτεί μια σειρά εργαλείων και διαδικασιών τα οποία συνήθως ενσωματώνονται όλα μαζί σε ένα ενοποιημένο περιβάλλον που αποκαλείται «ολοκληρωμένο περιβάλλον ανάπτυξης εφαρμογών» (Integrated Development Environment, IDE).
Η διαδικασία μετατροπής του πηγαίου κώδικα σε εκτελέσιμο αρχείο περιγράφεται στο παρακάτω διάγραμμα:
Εικ. 1 Η ροή εκτέλεσης του κώδικα σε εκτελέσιμο.¶
Τα εργαλεία προγραμματισμού τα οποία κάνουν την μεταγλωττιστή του πηγαίου προγράμματος σε εκτελέσιμο πρόγραμμα είναι τα εξής:
ο επεξεργαστής κειμένου με την βοήθεια οποίου συντάσσεται ο πηγαίο κώδικάς του προγράμματος.
ο μεταγλωττιστής ή διερμηνευτής οι οποίοι χρησιμοποιούνται για την μετατροπή του πηγαίου κώδικα σε γλώσσα μηχανής η οποία είναι απαραίτητη για την αναγνώριση και εκτέλεση των εντολών από τον Η/Υ. Τα παραγόμενο πρόγραμμα από την μεταγλώττιση ονομάζεται αντικείμενο πρόγραμμα (object). Ο διερμηνευτής διαβάζει διαδοχικά τις εντολές και για κάθε εντολή που διαβάζει, εκτελεί αμέσως μια ισοδύναμη ακολουθία εντολών μηχανής. Από την άλλη, ο μταγλωττιστής δέχεται στην είσοδο ένα πρόγραμμα γραμμένο σε γλώσσα υψηλού επιπέδου (πηγαίο κώδικα) και παράγει ισοδύναμο πρόγραμμα σε γλώσσα μηχανής (αντικείμενο).
ο συνδέτης - φορτωτής (linker- loader) ο οποίος συνδέει το αντικείμενο πρόγραμμα με άλλα τμήματα του προγράμματος ή απαραίτητες βιβλιοθήκες που διατίθεται από την γλώσσα προγραμματισμού. Το τελικό πρόγραμμα που προκύπτει από την μεταγλώτισση και την σύνδεση των τμημάτων του προγράμματος είναι το εκτελέσιμο πρόγραμμα (executable) το οποίο μπορεί να διαβάσει και να εκτελέσει ο υπολογιστής.
τα εργαλεία αποσφαλμάτωσης με την βοήθεια των οποίων δοκιμάζεται η εκτέλεση και η ορθότητα του πηγαίου κώδικα και εντοπίζονται λάθη σε αυτόν.
Τα λάθη στον κώδικα συνοψίζονται σε τρείς βασικές κατηγορίες:
σφάλμα μεταγλώττισης τα οποία προκύπτουν κατά την λανθασμένη συγγραφή του πηγαίου κώδικα. Ο μεταγλωττιστής δεν επιτρέπει την μετάφραση του πηγαίου κώδικα σε γλώσσα μηχανής αν προηγουμένος δεν έχει διορθωθεί το συντακτικό λάθος. Συντακτικά λάθη συμβαίνουν συνήθως όταν δεν ακολοθούνται οι κανόνες σύνταξης μια γλώσσας (π.χ. μια παρένθεση που δεν έχει κλείσει, ένα ξεχασμένο εισαγωγικό ή κόμμα κτλ.).
Το παρακάτω είναι ένα παράδειγμα συντακτικού σφάλματος και το μήνυμα που επιστρέφει ο μεταγλωττιστής της Python. Η αιτία του σφάλματος είναι η ξεχασμένη παρένθεση στην συνάρτηση (function) print
print("an example"
Input In [2]
print("an example"
^
SyntaxError: '(' was never closed
σφάλμα εκτέλεσης (run-time errors) τα οποία συμβαίνουν κατά την εκτέλεση του προγράμματος παρότι δεν υπάρχουν σφάλματα σύνταξης. Χαρακτηριστικά παραδείγματα τέτοιων λαθών είναι η διαίρεση με το μηδέν, η πρόσβαση σε ένα στοιχείο μιας λίστας εκτός του εύρους της, η ανάγνωση ενός αρχείου το οποίο δεν υπάρχει, ή η πρόσβαση σε ένα ανύπαρκτο object. Τα σφάλματα εκτέλεσης έχουν επικρατήσει να αναφέρονται και ως «bugs» 1. Παρακάτω δίνεται ένα σφάλμα που προκύπτει από την διαίρεση ενός ακέραιου με το μηδέν.
1/0
---------------------------------------------------------------------------
ZeroDivisionError Traceback (most recent call last)
Input In [3], in <cell line: 1>()
----> 1 1/0
ZeroDivisionError: division by zero
σφάλμα λογικής, κατά το οποίο το πρόγραμμα εκτελείται κανονικά χωρίς σφάλματα αλλά δεν συμπεριφέρεται όπως έχει σχεδιαστεί να συμπεριφέρεται. Αυτά τα σφάλματα δεν σταματούν την εκτέλεση του προγράμματος αλλά το αποτέλεσμα της εκτέλεσης δεν ειναι το αναμενόμενο.
x = 6
y = 4
z = x+y/2
print('Ο μέσος όρος των δύο αριθμών είναι:',z)
Ο μέσος όρος των δύο αριθμών είναι: 8.0
Το παραπάνω είναι σφάλμα λογικής γιατί έπρεπε να γραφτεί ως εξής (δώστε προσοχή στις παρενθέσεις που δίνουν προτεραιότητα στις πράξεις):
x = 6
y = 4
z = (x+y)/2
print('Ο μέσος όρος των δύο αριθμών είναι:',z)
Ο μέσος όρος των δύο αριθμών είναι: 5.0
Όλες οι παραπάνω μορφές σφαλμάτων εντοπίζονται μέσω της αποσφαλμάτωσης, της συστηματικής δηλαδή διαδικασίας εντοπισμού και επιδιόρθωσης σφαλμάτων. Η αποσφαλμάτωση συνοψίζεται στα εξής βήματα:
Επανάληψη του προβλήματος
Απομόνωση του σημείου που εμφανίζεται το σφάλμα
Αναγνώριση της αιτίας που το προκαλεί
Διόρθωση του σφάλματος
Επιβεβαίωση της διόρθωσης
Οι εντολές των προγραμμάτων γράφονται από τους προγραμματιστές σε τεχνητές γλώσσες που ονομάζονται «γλώσσες προγραμματισμού». Μια γλώσσα προγραμματισμού θα πρέπει να έχει αυστηρά ορισμένη σύνταξη και σημασιολογία. Η σύνταξη καθορίζει αν μια σειρά από σύμβολα αποτελούν «νόμιμες» εντολές ενός προγράμματος γραμμένου σε μια συγκεκριμένη γλώσσα προγραμματισμού και η σημασιολογία καθορίζει τη σημασία του προγράμματος, δηλαδή τις υπολογιστικές διαδικασίες που υλοποιεί. [Aγγελιδάκης, 2015].
H γλώσσα προγραμματισμού Python¶
Η Python είναι μια ευρέως διαδομένη, αντικειμενοστραφής, υψηλού επιπέδου γλώσσα προγραμματισμού γενικής χρήσης. Η Python είναι μια γλώσσα που εκτελεί τις εντολές στον διερμηνέα, που όπως αναφέρθηκε,διαβάζει τον πηγαίο κώδικα γραμμή προς γραμμή και το μετατρέπει σε γλώσσα μηχανής. Αυτός ο τρόπος λειτουργίας της Python την καθιστά πιο αργή σε σύγκριση με άλλες γλώσσες μεταγλωττιστού όπως η C. H Python είναι διαδραστική υπό την έννοια ότι ο χρήστης εκτελεί εντολές μέσω της γραμμή εντολών της Python, εκτελείται άμεσα και λαμβάνει το αποτέλεσμα εξόδου.
Δημιουργήθηκε από τον Guido van Rossum και πρωτοκυκλοφόρησε στις 20 Φεβρουαρίου του 1991. Το όνομά της, αν και παρεπέμπει, δεν έχει σχέση με το φίδι Πύθωνα αλλά προέρχεται από την γνωστή κωμικη σειρά του BBC, Monty Python’s Flying Circus. Αν και αρχικά αναπτύχθηκε σαν μεμονωμένη ατομική προσπάθεια στην συνέχεια υποστηρίχθηκε από μια παγκόσμια κοινότητα προγραμματιστών και χρηστών. Στις 6 Μαρτίου 2001 ιδρύθηκε το αμερικάνικο μη κερδοσκοπικό ίδρυμα Python Software Foundation (PSF), το οποίο στόχο έχει την διάδοση και υποστήριξη της Python μέσω της διοργάνωσης συνεδρίων, την ανάπτυξη κοινοτήτων χρηστών, την υποστήριξη προσπαθειών μέσω υποτροφιών και την διασφάλιση οικονομικών πόρων για την ανάπτυξη της γλώσσας. Το ίδρυμα κατέχει τα πνευματικά δικαιώματα της γλώσσας και διασφαλίζει ότι αυτή θα διατίθεται με όρους ελεύθερου λογισμικού προς το ευρύτερο κοινό.
Οι βασικοί στόχοι που έθεσε ο δημιουργός κατά την ανάπτυξή της είναι να είναι εύκολη και κατανοητή με ισχυρές δυνατότητες εφάμιλλες των ανταγωνιστικών γλωσσών. Ταυτόχρονα έθεσε το όρο να είναι ανοιχτού κώδικα (open source) για να μπορεί εύκολα να αναπτύσσεται απο τους ενδιαφερόμενους προγραμματιστες και να έχει πρακτική αξία σε καθημερινές εργασίες ρουτίνας. Την τρέχουσα περίοδο (03/2022) κατατάσσεται ως η κορυφαία γλώσσα προγραμματισμού σύμφωνα με την κοινότητα προγραμματιστών TIOBE αλλά και τον δείκτη PopularitY of Programming Language Index (PYPL).
Εικ. 2 Η κατάταξη σύμφωνα με την κοινότητα TIOBE (Μάρτιος 2022)¶
Η Python πλέον είναι μια ώριμη γλώσσα προγραμματισμού με εφαρμογές στην ανάπτυξη διαδικτυακών εφαρμογών και υπηρεσιών, την εκπαίδευση, την ανάλυση δεδομένων, την τηλεπισκόπηση και τα ΣΓΠ, την δημιουργία γραφικών, την διαχείριση συστημάτων, τα παιχνίδια, το εμπόριο και την επιχειρηματικότητα, τους μικροελεγκτές και το Internet of Things (IOT).
Η φιλοσοφία της Python ως προς την μεθοδολογία ανάπτυξης και προγραμματισμού συνοψίζεται σε 20 αρχές, οι οποίες εκτυπώνονται μέσω της γλώσσας με την παρακάτω εντολή:
import this
The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
To oλοκληρωμένο περιβάλλον ανάπτυξης thonny¶
Η συγγραφή κώδικα θα γίνει στο ολοκληρωμένο περιβάλλον ανάπτυξης (Integrated Development Environment, IDE) thonny. Δεν απαιτείται η προεγκατάσταση της Python καθώς το thonny έρχεται με ενσωματωμένη την γλώσσα προγραμματισμού Python 3.7 και διατίθεται για Windows, Mac και Linux. Το thonny αποτελεί εκπαιδευτικό περιβάλλον για την συγγραφή και αποσφαλμάτωση κώδικα Python. Για τον λόγο αυτό διαθέτει πολύ συγκεκριμένες αλλά ζωτικές λειτουργίες και δεν είναι επιφορτισμένο με δυνατότητες που απαιτούνται από προχωρημένους προγραμματιστές. Το Γραφικό Περιβάλλον Χρήστη (GUI, Graphical User Interface) είναι λιτό ώστε να μην αποπροσανατολίζει τον αρχάριο χρήστη. Το thonny παρέχει βοηθητικές λειτουργίες για τον χρήστη όπως είναι η σήμανση συντακτικών λαθών, η αυτόματη συμπλήρωση κώδικα και η ευκολία στην επέκταση των λειτουργίων της Python με την εγκατάσταση συμπληρωματικών πακέτων.
Ενναλλακτικά, στους χρήστες παρέχεται online περιβάλλον ανάπτυξης που βασίζεται στο Jupyter Lab. Η χρήση του δεν απαιτεί την εγκατάσταση λογισμικού παρά μόνον έναν απλό φυλλομετρητή (προτείνεται Chrome, Safari ή Firefox). Το online περιβάλλον Jupyter είναι προσβάσιμο από εδώ: https://kokkytos.github.io/programming
Εικ. 3 Το περιβάλλον εργασία thonny.¶
Εκτέλεση εντολών στο περιβάλλον thonny¶
Στην παρακάτω ενότητα παρουσιάζονται μερικά εισαγωγικά παραδείγματα από εντολές της Python. Δεν θα επικεντρωθούμε σε λεπτομέρειες ούτε θα αναλύσουμε τις εντολές που διατυπώνονται στα αρχεία. Παρουσιάζονται σαν μια μορφή συνοπτικής επίδειξης των δυνατοτήτων που διαθέτει η γλώσσα και θα περιγράψουμε σε επόμενα μαθήματα.
Δοκιμάστε να τρέξετε την παρακάτω εντολή στην γραμμή εντολών της Python στο thonny:
25+30
55
Τι παρατηρείτε; Η Python λειτούργησε σαν μια απλή αριθμομηχανή.
Στην συνέχεια δοκιμάστε να τρέξετε την παρακάτω εντολή γραμμή προς γραμμή:
number1 = 25
number2 = 30
number3 = number1+number2
number3
55
Το αποτέλεσμα είναι το ίδιο με το προηγούμενο.
Δώστε την παρακάτω εντολή. Αντικαταστήστε την συμβολοσειρά AnyName με το ονομά σας.
name="AnyName"
for i in range(10):
print("Εκτύπωση", i,":", name)
Εκτύπωση 0 : AnyName
Εκτύπωση 1 : AnyName
Εκτύπωση 2 : AnyName
Εκτύπωση 3 : AnyName
Εκτύπωση 4 : AnyName
Εκτύπωση 5 : AnyName
Εκτύπωση 6 : AnyName
Εκτύπωση 7 : AnyName
Εκτύπωση 8 : AnyName
Εκτύπωση 9 : AnyName
Όπως βλέπετε η Python επανέλαβε την εκτύπωση του ονόματός σας 10 φορές. Από που ξεκινά όμως η αρίθμηση της πρώτης εκτύπωσης;
Στο επόμενο παράδειγμα η Python θα σας ενημερώσει αν τρέχετε γρήγορα ή αργά ή αν είστε ακίνητος:
speed=70
if speed>50:
if speed>=100:
print("Τρέχεις πολύ γρήγορα")
else:
print("Τρέχεις γρήγορα")
else:
if speed==0:
print("Είσαι ακίνητος".upper())
if speed>0:
print("Τρέχεις αργά")
Τρέχεις γρήγορα
Έστω ότι κινείσθε σε αυτοκινητόδρομο με 120 km/h. Αν ορίσετε την ταχύτητα (speed) στον κώδικα, τι θα σας απαντήσει η Python; Αν κινείστε με μηδενική ταχύτητα (speed=0) τι μήνυμα θα λάβετε; Υπάρχουν περιπτώσεις που η Python, και δικαιολογημένα, αγνοεί να απαντήσει με μήνυμα στην ταχύτητα που ορίζεται. Μπορείτε να εντοπίσετε σε ποιές περιπτώσεις;
- 1
Η πρώτη περίπτωση bug σε υπολογιστή καταγράφεται το 1947 από τον Grace Murray Hopper και πρόκειται για την κυριολεκτική έννοια του όρου. Στο ημερολόγιό του καταγράφει προβλήματα στην λειτουργία του υπολογιστή του Harvard, Mark II, από την ύπαρξη ενός εντόμου στο εσωτερικό του κύκλωμα.
2. Τιμές, τύποι και μεταβλητές. Συμβολοσειρές¶
Σταθερές (Constants)¶
H Python δεν διαθέτει προκαθορισμένες σταθερές όπως άλλες γλώσσες προγραμματισμού. Όμως κατά σύμβαση και όχι κατά κανόνα έχει συμφωνηθεί οι σταθερές να ονοματίζονται με κεφαλαίους χαρακτήρες. Η αδυναμία της Python στην περίπτωση της δήλωσης σταθερών είναι ότι επιτρέπεται η αλλαγή των τιμών τους Παρακάτω παρατίθεται ένα παράδειγμα δήλωσης σταθερών.
RATIO_FEET_TO_METERS = 3.281
RATIO_LB_TO_KG = 2.205
PI = 3.14
Κυριολεκτικές σταθερές (literal constants)¶
Η κυριολεκτική σταθερά ή τιμή είναι ένας αριθμός, ή χαρακτήρας ή μιά συμβολοσειρά. Για παράδειγμα τα παρακάτω αποτελούν τιμές: 3.25 (στην python η υποδιαστολή ορίζεται με . και όχι ,), «ένα τυχαίο κείμενο», 5.25e-1. Αυτές οι τιμές δεν μεταβάλλονται κατά τη διάρκεια εκτέλεσης του προγράμματος γι” αυτό και λέγονται σταθερές. Μπορούν να εκχωρηθούν σε μεταβλητές και να χρησιμοποιηθούν σαν τελεστέοι σε λογικές εκφράσεις ή σαν παραμέτροι σε συναρτήσεις.
Τύποι δεδομένων¶
Οι τιμές ανήκουν σε τρεις τύπους δεδομένων (data types) ή κλάσσεις (class):
τους ακέραιους αριθμούς (integer) π.χ. το 15
τους αριθμούς κινητής υποδιαστολής (floating point) π.χ. το 201.25)
τις συμβολοσειρές (string) π.χ. το «Time is money»
Με την εντολή type ο διερμηνευτής μας απαντάει με τον τύπο της τιμής, όπως παρακάτω:
type("No news, good news.")
str
Η Python είναι Dynamic typing δηλαδή δεν ο τύπος των μεταβλητών δεν προκαθορίζεται κατά την συγγραφή αλλά κατά την εκτέλεση.
Κανόνες ονοματοδοσίας μεταβλητών¶
Τα ονόματα των μεταβλητών στην Python υπακούουν στους παρακάτω κανόνες:
Το όνομα μίας μεταβλητής μπορεί να ξεκινά από ένα γράμμα ή από κάτω πάυλα.
Το όνομα μίας μεταβλητής δεν μπορεί με αριθμό.
Το όνομα μίας μεταβλητής μπορεί να περιέχει μόνο αλφαριθμητικούς χαρακτήρες.
Στα ονόματα των μεταβλήτών γίνεται διάκριση ανάμεσα σε πεζά και κεφαλαία (case sensitive).
Οι δεσμευμένες λέξεις της Python (keywords) δεν μπορούν να χρησιμοποιηθούν σε ονόματα μεταβλητών.
Συμβολοσειρές (Strings)¶
Μια συμβολοσειρά είναι μια ακολουθία από χαρακτήρες όπως το "Το πεπρωμένον φυγείν αδύνατον.".
Μπορεί να είναι σε κάθε γλώσσα που υποστηρίζεται από το πρώτυπου Unicode. Οι συμβολοσειρές περικλείονται σε μονά, διπλά ή τριπλά εισαγωγικά.
Με τριπλά εισαγωγικά μπορούν να ενσωματωθούν με ευκολία συμβολοσειρές σε πολλές γραμμές και πολλαπλά εισαγωγικά εντός αυτόν.
Ακολουθούν παραδείγματα συμβολοσειρά.
Χαρακτήρες διαφυγής,κενά, νέες γραμμές¶
Μπορούμε να σπάσουμε μια συμβολοσειρά κατά την συγγραφή σε νέα γραμμή με τον χαρακτήρα \ και κατά την εκτέλεση με τον χαρακτήρα \n π.χ.
message = 'There is no smoke \
without fire'
print(message)
There is no smoke without fire
message = 'There is no smoke \nwithout fire'
print(message)
There is no smoke
without fire
Ή να ορίσουμε κενά με το \t
message = 'There is no smoke \twithout fire'
print(message)
There is no smoke without fire
Ο χαρακτήρας \ είναι χαρακτήρας διαφυγής που απενεργοποιεί την ειδική λειτουργία των παραπάνω ή την παράθεση εισαγωγικών μεσα σε εισαγωγικά.
print('There is no smoke \\n without fire')
There is no smoke \n without fire
print('Where there\'s a will, there\'s a way')
Where there's a will, there's a way
Ανεπεξέργαστες συμβολοσειρές (Raw Strings)¶
Παρόμοιο αποτέλεσμα με τα παραπάνω πετυχαίνουμε τις ανεπεξέργαστες συμβολοσειρές οι οποίες ορίζονται με ένα r σαν πρόθεμα
print(r"It was made by \n συνέχεια")
It was made by \n συνέχεια
Αφαίρεση κενών¶
Σε αρκετές περιπτώσεις οι συμβολοσειρές περιέχουν κενά είτε στην αρχή είτε στο τέλος. Για παράδειγμα οι παρακάτω συμβολοσειρές δεν είναι το ίδιες για την Python. Και επιβεβαιώνεται σε μέσω ελέγχου ισότητας.
departmentA='ΤΜΧΠΑ'
departmentB = ' ΤΜΧΠΑ '
print(departmentA == departmentB) #not equal
False
Για την αφαίρεση των κένων αριστερά, δεξιά ή ταυτόχρονα και στις δύο πλευρές της συμβολοσειρας χρησιμοποιούμε την μέθοδο strip και τις παραλλαγές της rstrip και lstrip
print(departmentB.rstrip())
print(departmentB.lstrip())
print(departmentB.strip())
ΤΜΧΠΑ
ΤΜΧΠΑ
ΤΜΧΠΑ
Συνένωση (Concatenation) συμβολοσειρών¶
Η απλή παράθεση συμβολοσειρών οδηγεί στην συνενωσή τους δηλ.
message = "Curiosity " "killed " 'the ' '''cat'''
print(message)
Curiosity killed the cat
Συνένωση συμβολοσειρών και μεταβλητών¶
Η συνένωση μεταβλητών και συμβολοσειρών γίνεται με τον τελεστη +.
city='Βόλος'
perifereia='Θεσσαλία'
print('O '+city+' είναι πόλη της Ελλάδα στην ' +perifereia)
O Βόλος είναι πόλη της Ελλάδα στην Θεσσαλία
Η μέθοδος format¶
Άλλη μια πιο πρακτική μέθοδος κατά την συννένωση μεταβλητών και συμβολοσειρών είναι η μέθοδος format.
print('O {0} έχει υψόμετρο {1} μέτρα'.format("Όλυμπος", 2918))
print('O {} έχει υψόμετρο {} μέτρα'.format("Όλυμπος", 2918))
print('O {name} έχει υψόμετρο {height} μέτρα'.format(name="Σμόλικας", height= 2637 ))
O Όλυμπος έχει υψόμετρο 2918 μέτρα
O Όλυμπος έχει υψόμετρο 2918 μέτρα
O Σμόλικας έχει υψόμετρο 2637 μέτρα
Δεσμευμένες λέξεις (reserved words)¶
Ορισμένες λέξεις έχουν ιδιαίτερη σημασία για την python και δεν μπορούν να χρησιμοποιηθούν σαν ονόματα μεταβλητών. Τα παρακάτω κομμάτια κώδικα θα εκδηλώσουν σφάλμα μεταγλώττισης.
Πρόκειται για 33 λέξεις στην τρέχουσα έκδοση της Python. Μπορούμε να δούμε ποιές είναι αυτές οι δεσμεύνες λέξεις με την παρακάτω εντολή:
help("keywords")
Here is a list of the Python keywords. Enter any keyword to get more help.
False class from or
None continue global pass
True def if raise
and del import return
as elif in try
assert else is while
async except lambda with
await finally nonlocal yield
break for not
Η εντολή help¶
Γενικά με την εντολή help καλούμε για βοήθεια και πληροφορίες την Python:
help(print)
Help on built-in function print in module builtins:
print(...)
print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
Prints the values to a stream, or to sys.stdout by default.
Optional keyword arguments:
file: a file-like object (stream); defaults to the current sys.stdout.
sep: string inserted between values, default a space.
end: string appended after the last value, default a newline.
flush: whether to forcibly flush the stream.
help(abs)
Help on built-in function abs in module builtins:
abs(x, /)
Return the absolute value of the argument.
help(max)
Help on built-in function max in module builtins:
max(...)
max(iterable, *[, default=obj, key=func]) -> value
max(arg1, arg2, *args, *[, key=func]) -> value
With a single iterable argument, return its biggest item. The
default keyword-only argument specifies an object to return if
the provided iterable is empty.
With two or more arguments, return the largest argument.
Αλλαγή Πεζών Κεφαλαίων (Convert case)¶
Μπορούμε να κάνουμε αλλαγή ανάμεσα σε κεφαλαία και πεζά με τις παρακάτω μεθόδους συμβολοσειρών:upper(), title(), lower().
Αξίζει να σημειώσουμε ότι οι μέθοδοι αυτές δεν έχουν επίδραση στην μεταβλητή που τις καλούμε αλλά πρέπει να επαναεκχωρήσουμε το αποτέλεσμα της μεθόδου στην μεταβλητή με το ίδιο όνομα.
agios="άγιος νικόλαος"
print(agios.upper())
print(agios) # ο agios παραμένει "άγιος νικόλαος"
print(agios.title())
print('ΑΓΊΑ ΕΛΈΝΗ'.lower())
agios = agios.upper()
print(agios) # ο agios μετά την εκχώρηση στην ίδια μεταβλητή γινεται ΆΓΙΟΣ ΝΙΚΌΛΑΟΣ
ΆΓΙΟΣ ΝΙΚΌΛΑΟΣ
άγιος νικόλαος
Άγιος Νικόλαος
αγία ελένη
ΆΓΙΟΣ ΝΙΚΌΛΑΟΣ
Οι συμβολοσειρές είναι μη μεταβαλλόμενη δομή δεδομένων¶
Οι συμβολοσειρές αποτελούνται από ακολουθίες χαρακτήρων με σταθερό μέγεθος και μη μεταβαλλόμενα περιεχόμενα. Αυτό σημαίνει ότι δεν είναι δυνατόν να προστίθενται ή να αφαιρούνται χαρακτήρες, ούτε να τροποποιούνται τα περιεχόμενα του αλφαριθμητικού. Πρόκειται για μια μη μεταβαλλόμενη (immutable) δομή της Python. Η αρίθμηση των χαρακτήρων σε ένα αλφαριθμητικό ξεκινάει από το 0.
Έτσι στην συμβολοσειρά country = Ελλάδα έχουμε:
country[0] → Ε (η αρίθμηση ξεκινά από το 0)
country[1] → λ
country[2] → λ
country[3] → ά
country[4] → δ
country[5] → α
Η παραπάνω συμβολοσειρά έχει μήκος 6 χαρακτήρες.
Μήκος συμβολοσειράς¶
Μέσω της συνάρτησης len η Python μας επιστρέφει το μήκος συμβολοσειράς δηλαδή το πλήθος των χαρακτήρων (μαζί με τα κενά) από τους οποιούς αποτελείται.
message = 'Ή τώρα ή ποτέ.'
len(message)
14
Η μέθοδος find¶
Η μέθοδος find μας επιτρέπει να αναζητήσουμε μια συμβολοσειρά μέσα σε μια άλλη συμβολοσειρά.
Η μέθοδος μας επιστρέφει την τοποθεσία από την ξεκινάει η αναζητούμενη συμβολοσειρά δηλαδή τον δείκτη (index) στην οποία εντοπίζεται
ο πρώτος χαρακτηρας της αναζητούμενης συμβολοσειράς μέσα στα περιεχόμενα της αρχικής συμβολοσειράς.
Στην παρακάτω συμβολοσειρά θα αναζητήσουμε την λέξη ποτέ.
stixos = 'Η Ελλάδα ποτέ δεν πεθαίνει'
index = stixos.find('ποτέ')
Κανονικά αν πάμε στον χαρακτήρα με ευρετηρίο (index) 9 πρέπει να εντοπίσουμε τον πρώτο χαρακτήρα της συμβολοσειράς που είναι το π.
Πράγματι:
stixos[index]
'π'
Αν δεν εντοπιστεί η λέξη που αναζητούμε στην συμβολοσειρά η Python θα επιστρέψει: -1
stixos.find('πάντα')
-1
Η αναζήτηση είναι case sensitive δηλαδή γίνεται διάκριση ανάμεσα σε πεζά και κεφαλαία.
stixos.find('Ελλάδα') # επιστρέφει τον δείκτη 2 γιατί εντοπίστηκε η λέξη κλειδί
2
stixos.find('ΕΛΛΆΔΑ') # επιστρέφει -1 γιατί δεν εντοπίστηκε η λέξη κλειδί
-1
Μια άλλη σημαντική μέθοδος των συμβολοσειρών είναι η μέθοδος replace κατά την οποία μπορούμε να αντικαταστήσουμε τα περιεχόμενα μιας συμβολοσειράς. Στην πρώτη παράμετρο ορίζουμε την συμβολοσειρά που θέλουμε να αντικαταστήσουμε με την δεύτερη παράμετρο.
stixos.replace('ποτέ', 'πάντα')
'Η Ελλάδα πάντα δεν πεθαίνει'
3. Λίστες. Εκφράσεις, τελεστές¶
Στην τρέχουσα ενότητα γίνεται αναφορά σε μια από τις πιο δυνατές και χρήσιμες δομές της Python, τις λίστες. Οι λίστες μας επιτρέπουν να αποθηκεύομαι σύνολα πληροφορίας σε ένα μέρος είτε πρόκειται για ένα είτε για εκατομμύρια στοιχεία. Oι λίστες αποτελούνται από μία σειρά από στοιχεία, καθένα από τα οποία μπορεί να ανήκει σε διαφορετικό τύπο δεδομένων.
Definition 4
Μία λίστα (list) είναι μια διατεταγμένη συλλογή τιμών, οι οποίες αντιστοιχίζονται σε δείκτες. Οι τιμές που είναι μέλη μιας λίστας ονομάζονται στοιχεία (elements). Τα στοιχεία μιας λίστας δεν χρειάζεται να είναι ίδιου τύπου και ένα στοιχείο σε μία λίστα μπορεί να υπάρχει περισσότερες από μία φορές. Μία λίστα μέσα σε μία άλλη λίστα ονομάζεται εμφωλευμένη λίστα (nested list). Επιπρόσθετα, τόσο οι λίστες όσο και οι συμβολοσειρές, που συμπεριφέρονται ως διατεταγμένες συλλογές τιμών, ονομάζονται ακολουθίες (sequences). Τα στοιχεία μιας λίστας διαχωρίζονται με κόμμα και περικλείονται σε τετράγωνες αγκύλες ([ και ]). Μία λίστα που δεν περιέχει στοιχεία ονομάζεται άδεια λίστα και συμβολίζεται με [] [Aγγελιδάκης, 2015].
Παρακάτω δίνονται μερικά παραδείγματα από λίστες
bicycles = ['trek', 'cannondale', 'redline', 'specialized']
colors = ["red", "green", "black", "blue"]
scores = [10, 8, 9, -2, 9]
myList = ["one", 2, 3.0]
languages=[['English'],['Gujarati'],['Hindi'],'Romanian','Spanish'] # εμφωλευμένη λίστα (nested list)
list_A = [] # άδεια λίστα
Οι λίστες είναι ταξινομημένες συλλογές δεδομένων. Η πρόσβαση στα στοιχεία της λίστας γίνεται μέσω του δείκτη ή της θέσης του κάθε στοιχείου. Το σημαντικό που πρέπει να συγκρατηθεί είναι ότι η αρίθμηση των στοιχείων σε μια λίστα ξεκινάει από το μηδεν. Το πρώτο στοιχείο έχει δείκτη 0, το δεύτερο 1 κ.ο.κ. Το τελευταίο στοιχείο στην λίστα έχει τον δείκτη -1, το δεύτερο στοιχείο από το τέλος τον δείκτη -2 κ.ο.κ. Δείτε στο παρακάτω παράδειγμα τι εκτυπώνεται με βάση την θέση που δηλώνουμε στην λιστα.
bicycles = ['trek', 'cannondale', 'redline', 'specialized']
print(bicycles[0])
print(bicycles[1])
print(bicycles[-1])
print(bicycles[1:3])
print(bicycles[1:3])
trek
cannondale
specialized
['cannondale', 'redline']
['cannondale', 'redline']
Παράδειγμα με εμφωλευμένη λίστα (nested list):
two_by_two = [[1, 2], [3, 4]]
print(two_by_two[0][1])
print(two_by_two[1][1])
2
4
Οι λίστες που περιέχουν συνεχόμενους ακέραιους αριθμούς μπορούν εύκολα να δημιουργηθούν ως εξής:
mylist = list(range(1,20))
print(mylist)
mylist1 = list(range(10))
print(mylist1)
mylist2 = list(range(1,20,4))
print(mylist2)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 5, 9, 13, 17]
Η μέθοδο index() μιας λίστας επιστρέφει το ευρετήριο (index) μιας τιμής:
bicycles = ['trek', 'cannondale', 'redline', 'specialized']
print(bicycles.index('redline'))
2
Σε αντίθεση με τις συμβολοσειρές (strings) οι λίστες είναι μεταβαλλόμενες δομές δεδομένων. Αυτό σημαίνει ότι μπορoύμε να τροποποιήσουμε τα στοιχεία της λίστα, να προσθέσουμε νέα ή να αφαιρέσουμε.
Για παράδειγμα μπορούμε να τροποποιήσουμε τα στοιχεία μιας λίστας ως εξής:
colors=['caramel','gold','silver','occur']
colors[3]='bronze'
print(colors)
['caramel', 'gold', 'silver', 'bronze']
colors=['caramel','gold','silver','occur']
colors[2:]=['bronze','silver']
print(colors)
['caramel', 'gold', 'bronze', 'silver']
colors=['caramel','gold','silver','occur']
colors[2:3]=['bronze','silver']
print(colors)
['caramel', 'gold', 'bronze', 'silver', 'occur']
Μπορούμε να προσθέσουμε ένα στοιχείο σε μια λίστα με την μέθοδο append π.χ.
gods = ['Δίας', 'Ερμής', 'Ποσειδώνας', 'Ήφαιστος']
print("{} θεοί".format(len(gods)))
print(gods)
gods.append("Αππόλωνας")
gods.append("Άρης")
print("{} θεοί".format(len(gods)))
print(gods)
4 θεοί
['Δίας', 'Ερμής', 'Ποσειδώνας', 'Ήφαιστος']
6 θεοί
['Δίας', 'Ερμής', 'Ποσειδώνας', 'Ήφαιστος', 'Αππόλωνας', 'Άρης']
Αν επιθυμούμε να προσθέσουμε πολλά στοιχεία τότε χρησιμοποιείται η μέθοδος extend
months=["Ιανουάριος", "Φεβρουάριος", "Μάρτιος"]
months.extend(["Απρίλιος", "Μαϊος"]) # προσοχή το όρισμα στην μέθοδο extend είναι λίστα (ή κάποιο iterable object)
Μπορούμε να αφαιρέσουμε στοιχεία από μία λίστα με διάφορους τρόπους.
Με την πρόταση del:
Όταν γνωρίζουμε την θέση του στοιχείου που θέλουμε να αφαιρεθεί από μια λίστα χρησιμοποιούμαι την πρόταση del. Για παράδειγμα
gods = ['Δίας', 'Ερμής', 'Ποσειδώνας', 'Ήφαιστος']
del gods[2]
print(gods)
# Το μήκος άλλαξε και μερικές από τις αντιστοιχίες στην λίστα. Πλέον ο θεός στην θέση 2 είναι ο:
print(gods[2])
['Δίας', 'Ερμής', 'Ήφαιστος']
Ήφαιστος
Με την μέθοδο pop:
Μία άλλη χρήσιμη μέθοδο για την αφαίρεση στοιχείων από μια λίστα είναι η μέθοδος pop. Μέσω της μεθόδου αυτής όχι απλά αφαιρείται το στοιχείο από την λίστα αλλά επιστρέφεται και ως τιμή διαθέσιμη να την εκμεταλλευτεί ο προγραμματιστής π.χ. σε μία νέα μεταβλητή. Δείτε το εξής παράδειγμα:
cars=["Alfa Romeo", "Renault", "BMW", "Renault", "Porsche"]
speed_car=cars.pop()
print(cars)
print(speed_car)
speed_car2=cars.pop(0)
print(speed_car2)
['Alfa Romeo', 'Renault', 'BMW', 'Renault']
Porsche
Alfa Romeo
Όπως φαίνεται από το παράδειγμα αν χρησιμοποιηθεί η μέθοδος pop() χωρίς δείκτη τότε αφαιρείται το τελευταίο στοιχείο της λίστας.
Με την μέθοδο remove:
Επιπλέον μπορούμε να αφαιρέσουμε στοιχεία από μία λίστα με την χρήση μιας τιμής και όχι με βάση τον δείκτη. Ωστόσο η παραπάνω τεχνική θα αφαιρέσει το πρώτο στοιχείο που θα εντοπιστεί με την τιμή αυτή.
gods = ['Δίας', 'Ερμής', 'Ποσειδώνας', 'Ερμής', 'Ήφαιστος']
gods.remove("Ερμής")
print(gods)
['Δίας', 'Ποσειδώνας', 'Ερμής', 'Ήφαιστος']
Χρήσιμες μέθοδοι (methods) και συναρτήσεις (functions)¶
Μία από τις πλέον χρήσιμες μεθόδους της κλάσσης list είναι η ταξινόμηση (sort).
cars=[ "Porsche", "Alfa Romeo", "Renault", "BMW", "Audi" ]
cars.sort()
print(cars)
['Alfa Romeo', 'Audi', 'BMW', 'Porsche', 'Renault']
όπως φαίνεται η ταξινόμηση των στοιχείων της λίστας είναι μόνιμη. Ωστόσο αν θέλουμε προσωρινή ταξινόμηση τότε χρησιμοποιείται η function sorted.
cars=[ "Porsche", "Alfa Romeo", "Renault", "BMW", "Audi" ]
print(sorted(cars))
print(cars)
['Alfa Romeo', 'Audi', 'BMW', 'Porsche', 'Renault']
['Porsche', 'Alfa Romeo', 'Renault', 'BMW', 'Audi']
Όπως βλέπετε κατά την τελευταία εκτύπωση η λίστα διατηρεί την αρχική ταξινόμηση.
Επιπλέον με την μέθοδο reverse μπορούμε να αντιστρέψουμε την διάταξη των στοιχείων της λίστας. Και εδώ το αποτέλεσμα είναι μόνιμο.
cars=[ "Porsche", "Alfa Romeo", "Renault", "BMW", "Audi" ]
cars.reverse()
print(cars)
['Audi', 'BMW', 'Renault', 'Alfa Romeo', 'Porsche']
Ακόμα μέσω της συνάρτησης len επιστρέφεται το πλήθος των στοιχείων της λίστας.
languages=['English','Gujarati', 'Hindi','Romanian','Spanish']
print(len(languages))
5
Εδώ πρέπει να δοθεί προσοχή. Γιατί ενώ η αρίθμηση των δεικτών ξεκινά από το 0 το μήκος της λίστας ξεκινά από το 1 για λίστα με ένα στοιχείο. Οπότε στο παρακάτω παράδειγμα θα λάβουμε σφάλμα εκτέλεσης αν πάμε να πάρουμε το 5ο και τελευταίο στοιχείο της λίστας. Γιατί αυτό ορίζεται με τον δείκτη 4 και όχι 5.
cars=[ "Porsche", "Alfa Romeo", "Renault", "BMW", "Audi" ]
print("Το μήκος της λίστας (πλήθος στοιχείων) είναι: ", len(cars))
print(cars[5])
Το μήκος της λίστας (πλήθος στοιχείων) είναι: 5
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
Input In [18], in <cell line: 3>()
1 cars=[ "Porsche", "Alfa Romeo", "Renault", "BMW", "Audi" ]
2 print("Το μήκος της λίστας (πλήθος στοιχείων) είναι: ", len(cars))
----> 3 print(cars[5])
IndexError: list index out of range
Σημείωση
Συχνά χρησιμοποιούμε έναν βρόγχο (loop) όπως το for για να προσπελάσουμε ένα προς ένα τα στοιχεία μιας λίστας. Δείτε το επόμενο παράδειγμα.
list = ['physics', 'chemistry', 1997, 2000]
for item in list:
print(item)
physics
chemistry
1997
2000
Σημαντικό
Ιδιαίτερη προσοχή πρέπει να δίνεται στον τρόπο που αντιγράφουμε λίστες. Δείτε γιατί στο επόμενο παράδειγμα.
nisia = ["Μήλος", "Κρήτη", "Λέσβος"]
greek_islands = nisia
greek_islands.append("Κέρκυρα")
print(nisia)
['Μήλος', 'Κρήτη', 'Λέσβος', 'Κέρκυρα']
Όπως φαίνεται οι μεταβλητές nisia και greek_islands αντιστοιχούν στο ίδιο υποκείμενο object και αν μεταβάλλοντας τα στοιχεία της μίας μεταβλητής η αλλαγή αντικατοπτρίζεται και στα στοιχεία της δεύτερης. Ο ενδεδειγμένος τρόπος για να αντιγράψουμε μια λίστα είναι να αντιγράψουμε όλα τα στοιχεία της ώστε να έχουμε δύο ανεξάρτητα objects (κλωνοποίηση).
nisia = ["Μήλος", "Κρήτη", "Λέσβος"]
greek_islands = nisia[:]
greek_islands.append("Κέρκυρα")
print(nisia)
print(greek_islands)
['Μήλος', 'Κρήτη', 'Λέσβος']
['Μήλος', 'Κρήτη', 'Λέσβος', 'Κέρκυρα']
Εκφράσεις και τελεστές¶
Μία έκφραση (expression) είναι ένας συνδυασμός από τιμές, μεταβλητές, τελεστές και κλήσεις σε συναρτήσεις. Οι τελεστές (operators) είναι λειτουργίες που κάνουν κάτι και μπορούν να αναπαρασταθούν με σύμβολα όπως το + ή με λέξεις κλειδιά όπως το and. Η αποτίμηση μιας έκφρασης παράγει μία τιμή και αυτός είναι και ο λόγος που μία έκφραση μπορεί να βρίσκεται στο δεξί μέρος μια εντολής εκχώρησης. Όταν μία μεταβλητή εμφανίζεται σε έκφραση, αντικαθίσταται από την τιμή της, προτού αποτιμηθεί η έκφραση [Aγγελιδάκης, 2015]. Δεν απαιτείται μία έκφραση να περιέχει ταυτόχρονα και τιμές και μεταβλητές και τελεστές. Μία τιμή, όπως και μία μεταβλητή, από μόνες τους είναι επίσης εκφράσεις.
Οι τελεστές χρησιμοποιούνται με αριθμητικές τιμές για την εκτέλεση μαθηματικών πράξεων. Ορισμένοι τελεστές έχουν εφαρμογή κα σε συμβολοσειρές. Πιο συγκεκρικένα διατίθενται οι παρακάτω τελεστές:
Αριθμητικοί τελεστές¶
Τελεστής |
Όνομα |
Παράδειγμα |
|---|---|---|
+ |
Πρόσθεση αριθμών ή συνένωση συμβολοσειρών |
x + y |
- |
Αφαίρεση |
x - y |
* |
Πολλαπλασίασμός ή επανάληψη συμβολοσειράς |
x * y |
/ |
Διαίρεση |
x / y |
% |
Υπόλοιπο διαίρεσης δύο αριθμών |
x % y |
** |
Ύψωση αριθμού σε δύναμη |
x ** y |
// |
Διαίρεση δύο αριθμών στρογγυλοποιημένη προς τα κάτω |
x // y |
Τελεστές εκχώρησης¶
Χρησιμοποιούνται για να αποδώσουν τιμές σε μεταβλητές.
Τελεστής |
Παράδειγμα |
Αντίστοιχο με |
|---|---|---|
= |
x = 5 |
x = 5 |
+= |
x += 3 |
x = x + 3 |
-= |
x -= 3 |
x = x - 3 |
*= |
x *= 3 |
x = x * 3 |
/= |
x /= 3 |
x = x / 3 |
%= |
x %= 3 |
x = x % 3 |
//= |
x //= 3 |
x = x // 3 |
**= |
x **= 3 |
x = x ** 3 |
&= |
x &= 3 |
x = x & 3 |
|= |
x |= 3 |
x = x | 3 |
^= |
x ^= 3 |
x = x ^ 3 |
>>= |
x >>= 3 |
x = x >> 3 |
<<= |
x <<= 3 |
x = x << 3 |
Τελεστές σύγκρισης¶
Χρησιμοποιούνται για την σύγκριση 2 τιμών
Τελεστής |
Σύγκριση |
Παράδειγμα |
|---|---|---|
== |
Ίσον |
x == y |
!= |
Διαφορετικό |
x != y |
> |
Μεγαλύτερο από |
x > y |
< |
Μικρότερο από |
x < y |
>= |
Μεγαλύτερο ή ίσον από |
x >= y |
<= |
Μικρότερο ή ίσον από |
x <= y |
Λογικοί τελεστές¶
Τελεστής |
Περιγραφή |
Παράδειγμα |
|---|---|---|
and |
Επιστρέφει Αληθές (True) αν και οι δύο προτάσεις είναι αληθείς |
x < 5 and x < 10 |
or |
Επιστρέφει Αληθές (True) αν έστω μία από τις προτάσεις είναι αληθή |
x < 5 or x < 4 |
not |
Αντιστροφή απότελέσματος, επιστρέφει Μη Αληθές όταν το αποτέλεσμα είναι αληθές |
not(x < 5 and x < 10) |
Εκτός από τους παραπάνω τελεστές υπάρχουν πιο εξειδικεύμενοι τελεστές που δεν θα αναφερθούμε (Bitwise, Membership, Identity operators).
Οι τελεστές στη Python τηρούν την αντίστοιχη προτεραιότητα που χρησιμοποιείται και στα μαθηματικά.
Οι παρενθέσεις έχουν τη μεγαλύτερη προτεραιότητα. Πολλαπλασιασμός και διαίρεση έχουν υψηλότερα προτεταιότητα από την πρόσθεση και αφαίρεση.
Τελεστές με την ίδια προτεραιότητα αποτιμώνται από τα αριστερά προς τα δεξιά.
4. Πλειάδες και λεξικά¶
Στην συνέχεια παρουσιάζονται δύο άλλες καθιερωμένες δομές στην Python, οι πλειάδες (tuples) και τα λεξικά (dictionaries).
Πλειάδες (tuples)¶
Οι πλειάδες είναι μια δομή δεδομένων παρόμοια με τις λίστες. Όπως και οι λίστες αποτελούν μια συλλογή αντικειμένων (objects). Όμως διαφέρουν σε ένα σημαντικό χαρακτηριστικό από τις λίστες, είναι αμετάβλητες (immutable), δηλαδή δεν μπορούμε να μεταβάλλουμε το περιεχόμενό τους εφόσον τις δημιουργήσουμε. Κατά συνέπεια ενώ για την προσπέλαση των στοιχείων της χρησιμοποιούνται ίδιες τεχνικές και μέθοδοι (indexing, slicing κτλ) δεν υποστηρίζουν ωστόσο τις αντίστοιχες μεθόδους αφαίρεσης, τροποποίησης και προσθήκης στοιχείων. Υπό την έννοια αυτή οι πλειάδες είναι μια ασφαλή δομή δεδομένων μέσω της οποίας εξασφαλίζεται ότι τα δεδομένα δεν θα τροποποιηθούν από λάθος ή ακόμα και από επιλογή. Συνήθως χρησιμοποιούνται κατά την επιστροφή πολλαπλών τιμών από μια συνάρτηση αλλά και όταν θέλουμε να «πακετάρουμε» δεδομένα (tuple packing). Οι πλειάδες ορίζονται με παρόμοιο τρόπο σαν τις λίστες αλλά αντι για αγκύλες χρησιμοποιούνται παρανθέσεις (αν και δεν είναι απαραίτητες). Για παράδειγμα:
information = ('UTH','https://www.uth.gr/')
Το ίδιο μπορεί να γραφτεί και χωρίς παρενθέσεις
information = 'UTH','https://www.uth.gr/'
Όμως πρέπει να λαμβάνουμε υπόψιν ότι ο ορισμός μιας πλειάδες με ένα μόνο στοιχείο πρέπει να ορίζεται με το στοιχείο και να συνοδεύεται από ένα κόμμα. Σε διαφορετική περίπτωση θα επιστρέψει μια μεταβλητή με τύπο αυτόν που περάσαμε στο υποτιθέμενο πρώτο στοιχείο. Δηλαδή το παρακάτω θα δημιουργήσει μια μεταβλητή ακέραιου τύπου και όχι μια πλειάδα με ένα στοιχείο
year = (2022)
print(type(year))
<class 'int'>
Ο σωστός τρόπος συγγραφής αν θέλουμε να πάρουμε μια πλειάδα με ένα μόνο στοιχείο είναι:
year = (2022,)
print(type(year))
<class 'tuple'>
Ενώ αν θέλουμε να δημιουργήσουμε μία άδεια πλειάδα τότε χρησιμοποιούμε απλώς δύο παρενθέσεις:
empty_tuple = ()
Επιπλέον μέσω της συνάρτησης tuple η οποία δέχεται ως όρισμα μία συμβολοσειρά ή λίστα μπορούμε να δημιουργήσουμε νέες πλειάδες. Προσέξτε το αποτέλεσμα όταν ορίζουμε σαν παράμετρο συμβολοσειρά στην συνάρτηση tuple.
regions= tuple("Κρήτη")
print(regions)
('Κ', 'ρ', 'ή', 'τ', 'η')
regions= tuple(["Κρήτη", "Ήπειρος", "Θράκη"])
print(regions)
('Κρήτη', 'Ήπειρος', 'Θράκη')
Με κενό όρισμα επιστρέφεται μία άδεια λίστα:
regions= tuple()
Όπως προαναφέρθηκε οι πλειάδες είνα αμετάβλητες δομές δεδομένων και έτσι δεν μπορούμε να χρησιμοποιήσουμε μεθόδους όπως append, del, sort κ.α. Μπορούμε, όπως και στις λίστες, να αναφερθούμε στα στοιχεία της πλειάδας με τους τελεστές [] και με το ευρετήριο (index) ή να εξάγουμε τμήμα από τα στοιχεία (slice) με τον τελεστή :. Λαμβάνουμε το πλήθος των στοιχείων της πλειάδας (lengh) με την συνάρτηση len.
Οι πλειάδες χρησιμοποιούνται για να πακετάρουμε μια συλλογή δεδομένων σε ένα αντικείμενο (tuple packing) π.χ.
fruit1 = "Μήλος"
fruit2 = "Πορτοκάλι"
fruit1 = "Μανταρίνι"
fruits = fruit1, fruit1, fruit2 # tuple packing
print(fruits)
('Μανταρίνι', 'Μανταρίνι', 'Πορτοκάλι')
Βέβαια υπάρχει και η αντίστροφη διαδικασία, το «ξε-πακετάρισμα» δεδομένων (tuple unpacking). Όταν δηλαδή αποδίδουμε τα στοιχεία της πλειάδας σε ξεχωριστές μεταβλητές.
cities = "Αθήνα", "Βόλος", "Πάτρα"
capital, city1, city2 = cities # tuple packing
print(capital, city1, city2)
Αθήνα Βόλος Πάτρα
Ο αμετάβλητος χαρακτήρας των πλειάδων φαίνεται στα παρακάτω παραδείγμα στα οποία επιχειρείται η τροποποίηση των δεδομένων της.
cities = ("Αθήνα", "Βόλος", "Πάτρα")
cities.pop(1)
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
Input In [11], in <cell line: 2>()
1 cities = ("Αθήνα", "Βόλος", "Πάτρα")
----> 2 cities.pop(1)
AttributeError: 'tuple' object has no attribute 'pop'
cities.append("Ρόδος")
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
Input In [12], in <cell line: 1>()
----> 1 cities.append("Ρόδος")
AttributeError: 'tuple' object has no attribute 'append'
Όπως μας ενημερώνει και το σχετικό σφάλμα εκτέλεσης δεν υπάρχουν οι σχετικές μέθοδοι για αντικείμενα της κλάσης tuple.
Αντίστοιχο σφάλμα λαμβάνουμε και με τον παρακάνω κώδικα όταν πάμε να τροποποιήσουμε ένα στοιχείο της πλειάδας:
mytuple = (1, 2, 3)
mytuple[0] = 999
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Input In [13], in <cell line: 2>()
1 mytuple = (1, 2, 3)
----> 2 mytuple[0] = 999
TypeError: 'tuple' object does not support item assignment
Tip
Μια χρήσιμη λειτουργία των πλειάδων είναι η χρήση τους κατά την αντιμετάθεση δύο μεταβλητών. Δείτε το παρακάτω παράδειγμα.
island='Λέσβος'
island2='Χίος'
island, island2 = island2, island
print(island)
print(island2)
Χίος
Λέσβος
Προειδοποίηση
Προσοχή! Αν και οι πλειάδες είναι αμετάβλητος τύπος δεδομένων ωστόσο στα στοιχεία τους μπορούν να περιλαμβάνουν μεταβλητούς τύπους δεδομένων. Αυτό σημαίνει ότι μπορούμε να τροποποιήσουμε τα στοιχεία αυτά. Παρακάτω δίνεται ένα παράδειγμα.
cities = ("Αθήνα", ["Βόλος", "Πάτρα"])
cities[1][0] = "Καβάλα"
print(cities)
('Αθήνα', ['Καβάλα', 'Πάτρα'])
Μια εξήγηση σε αυτήν την αντιφατική συμπεριφορά δίνεται στο παρακάτω νήμα: https://stackoverflow.com/questions/9755990/why-can-tuples-contain-mutable-items
Λεξικά (Dictionaries)¶
Τα λεξικά στην Python αποτελούν συλλογές αντικειμένων, όπως οι λίστες και οι πλειάδες. Ένα σημαντικό χαρακτηριστικό των λεξικών είναι ότι αυτά αποθηκεύουν δεδομένα κατά ζεύγη, με την μορφή κλειδί-τιμή (key-value pairs). Κάθε κλειδί σε ένα λεξικό συνοδεύεται από μία τιμή. Κάθε κλειδί αποτελεί ουσιαστικά ένα μοναδικό αναγνωριστικό για την συνοδευτική τιμή και γι’αυτό τον λόγο δεν μπορεί να υπάρξει δεύτερο ίδιο κλειδί. Ακόμα, τα κλειδιά πρέπει να ορίζονται από αμετάβλητους τύπους δεδομένων δηλαδή είτε από μιά συμβολοσειρά είτε από έναν ακέραιο ή δεκαδικό. Δεν μπορεί όμως μια λίστα να είναι κλειδί. Μια πλειάδα μπορεί να είναι κλειδί αλλά με την προϋπόθεση ότι και αυτή δεν θα αποτελείται από μεταβλητούς τύπους δεδομένων. Τα λεξικά περικλείονται σε {}, τα ζεύγη ορίζονται υπό την μορφή κλειδί:τιμή και χωρίζονται μεταξύ τους με κόμμα (,) δηλαδή:
d = {key1 : value1, key2 : value2 }
Για παράδειγμα:
phones ={"Χρήστος": "69936565", "Κώστας":"246541353", "Βαγγέλης":"546546536"}
print(phones)
{'Χρήστος': '69936565', 'Κώστας': '246541353', 'Βαγγέλης': '546546536'}
Τα κλειδιά (keys) σε αυτήν την περίπτωση είναι τα ονόματα και οι αριθμοί τηλεφώνων (ως συμβολοσειρές ορισμένες) οι τιμές (values).
Εναλλακτικά μπορούμε να δημιουργήσουμε ένα άδειο λεξικό και να προσθέσουμε στην συνέχεια ζεύγη.
phones ={}
phones["Χρήστος"] ="69936565"
phones["Κώστας"] ="246541353"
phones["Βαγγέλης"]="546546536"
Ένας άλλος τρόπος δημιουργίας λεξικών είναι με την συνάρτηση dict.
phones =dict(Χρήστος="69936565",Κώστας="246541353", Βαγγέλης="546546536")
Με αυτόν τον τρόπο ορίζουμε τα κλειδιά μέσω μεταβλητών και γι” αυτό τον λόγο εφαρμόζονται οι περιορισμοί που αφορούν την ονοματολογία των μεταβλητών.
Στα λεξικά τα ζεύγη αυτά δεν ταξινομούνται με κάποια συγκεκριμένη σειρά αλλά με έναν μηχανισμό της Python που λέγεται hashing και αποσκοπεί στην γρήγορη ανάκτηση τους. Η ταξινόμηση αυτή αλλάζει κάθε φορά κατά τυχαίο τρόπο όταν τροποποιούμε ένα λεξικό. Για τον λόγο αυτό δεν υπάρχει η έννοια της θέσης ή του δείκτη (index) όπως στις λίστες και στις πλειάδες. Η ανάκτηση μιας τιμής από ένα ζεύγος γίνεται με βάση τo κλειδί π.χ.* d[“a_key”]*. Γίνεται δηλαδή με παρόμοιο τρόπο όπως στις λίστες και τις πλειάδες αλλά αντι για το ευρετήριο θέσης ορίζουμε το κλειδί.
print(phones["Χρήστος"])
print(phones["Βαγγέλης"])
69936565
546546536
Όπως προαναφέρθηκε δεν μπορούμε να έχουμε διπλό κλειδί σε ένα λεξικό. Έτσι αν επιχειρήσουμε να προσθέσουμε ένα ζεύγος με υφιστάμενο κλειδί στην πράξη αυτό που θα γίνει είναι να αντικαταστήσουμε την παλιά τιμή με μια νέα:
print(phones["Βαγγέλης"])
phones["Βαγγέλης"]="666666666"
print(phones["Βαγγέλης"])
546546536
666666666
Για την διαγραφή ενός ζεύγους από λεξικό χρησιμοποιείται η συνάρτηση del δηλ. del(d[“key”]). Δείτε το επόμενο παράδειγμα:
del(phones["Βαγγέλης"])
print(phones)
{'Χρήστος': '69936565', 'Κώστας': '246541353'}
Με την συνάρτηση len επιστρέφεται το μέγεθος του λεξικού δηλαδή το πλήθος των ζευγαριών κλειδιών/τιμών που περιέχει:
print(len(phones))
2
Μέσω του τελεστή *in * διαπιστώνεται αν υπάρχει ένα κλειδί σε ένα λεξικό:
print("Χρήστος" in phones)
True
Με την μέθοδο keys ενός λεξικού επιστρέφονται τα κλειδιά του. Αντίστοιχα με την μέθοδο values επιστρέφονται οι τιμές του ενώ με την μέθοδο items επιστρέφονται τα ζεύγη κλειδιών/τιμών. Τα επιστρεφόμενα objects είναι αντιστοιχα dict_keys, dict_values, dict_items. Ο παρακάτω κώδικας περιγράφει τις παραπάνω λειτουργίες:
d = {'a': 10, 'b': 20, 'c': 30}
print(d.keys())
print(d.values())
print(d.items())
dict_keys(['a', 'b', 'c'])
dict_values([10, 20, 30])
dict_items([('a', 10), ('b', 20), ('c', 30)])
Αν θέλουμε να ταξινομήσουμε το λεξικό με βάση τα κλειδιά τότε το κάνουμε με την συνάρτηση sorted:
thisdict = {
"year": 1964,
"brand": "Ford",
"model": "Mustang"
}
print(sorted(thisdict))
['brand', 'model', 'year']
Πολύ συνηθισμένη περίπτωση είναι τα λεξικά να περιλαμβάνουν σαν τιμές άλλα λεξικά.
contacts = {"Χρήστος": {"Σπίτι": "457456456", "Εργασία": "48856"},
"Γιάννης": {"Σπίτι": "8753778", "Εργασία": "45654656"},
"Κώστας": {"Κινητό": "45475354"}}
Σε αυτή την περίπτωση ορίζοντας διαδοχικά τα κλειδιά παίρνουμε τις τιμές που επιθυμούμε:
print(contacts["Χρήστος"])
print(contacts["Χρήστος"]["Εργασία"])
{'Σπίτι': '457456456', 'Εργασία': '48856'}
48856
Μπορούμε να διατρέξουμε τα ζεύγη ενός λεξικού αλλά η σειρά που θα γίνεται η ανάκτηση μπορεί να μην είναι με την σειρά που ορίζονται και όχι πάντα η ίδια.
for phone in phones:
print(phones[phone])
69936565
246541353
Όπως και με τις λίστες έτσι και με τα λεξικά πρέπει να είμαστε προσεκτικοί όταν αντιγράφουμε ένα λεξικό. Η αντιγραφή μπορεί να αναφέρεται στο ίδιο αντικείμενο και τροποποίηση των δεδομένων ενός λεξικού θα επιφέρει και την αντίστοιχη τροποποίηση στο άλλο.
names1 = {'name':"Κώστας"}
names2=names1
names2['name']="Γιάννης"
print(names1)
{'name': 'Γιάννης'}
Σε αυτή την περίπτωση χρησιμοποιείται η μέθοδος copy για την αντιγραφή των δεδομένων ενός λεξικού σε ένα άλλο.
names1 = {'name':"Κώστας"}
names2=names1.copy()
names2['name']="Γιάννης"
print(names1)
{'name': 'Κώστας'}
5. Έλεγχος ροής εκτέλεσης¶
Όλες οι γλώσσες προγραμματισμού απαρτίζονται από μια σειρά από προγραμματιστικές δομές. Οι τρεις βασικές δομές ελέγχου ροής προγράμματος είναι η δομή της ακολουθίας εντολών, η δομή της απόφασης και η δομή της επανάληψης. Κάποιες από αυτές αντιστοιχούν σε περισσότερες από μία εντολές [Manis, 2015].
Η λογική boolean¶
Για την υλοποίηση των δομών απόφασης χρησιμοποιείται η λογική boolean κατά την οποία ελέγχονται μία ή περισσότερες συνθήκες και ανάλογα το αποτέλεσμα επιλέγεται ποια ακολουθία εντολών θα εκτελεστεί. Το όνομα boolean προέρχεται από τον Βρετανό Μαθηματικό George Boole, ο οποίος εισήγαγε την ομώνυμη άλγεβρα που αφορά σε λογικούς κανόνες συνδυασμού των δύο τιμών True (Αληθής ) και False (Ψευδής). Οι τιμές αυτές ονομάζονται λογικές ή Boolean και ο τύπος τους στην Python είναι ο bool [Aγγελιδάκης, 2015].
type(False)
bool
Μία μεταβλητή μπορεί να δείχνει και σε μία τιμή τύπου bool. Για παράδειγμα:
raining=True
type(raining)
bool
Οι λογικές μεταβλητές είναι μεταβλητές οι οποίες διέπονται από την δυαδική λογική στην επιστήμη της πληροφορικής (1 και 0) και παίρνουν δύο τιμές True ή False. Ουσιαστικά πρόκεται για συνώνυμα του 1 (True) και 0 (False).
True+True
42 * True + False
42
Ο συνδυασμός των Boolean τιμών γίνεται με τη χρήση τριών βασικών λογικών τελεστών: not, and και or. Οι τελεστές αυτοί συμβολίζουν λογικές πράξεις (όχι, και , ή) και βοηθούν στη λήψη αποφάσεων σε ένα πρόγραμμα. Η σημαντική τους είναι πολύ παρόμοια με την καθημερινή τους σημασία [Aγγελιδάκης, 2015]. Ας υποθέσουμε ότι A και B είναι δύο μεταβλητές που δείχνουν σε Boolean τιμές ή δύο εκφράσεις (ονομάζονται λογικές ή Boolean) που αποτιμώνται σε Boolean τιμές. Ο επόμενος πίνακας, ο οποίος ονομάζεται πίνακας αληθείας, περιέχει τις τιμές που επιστρέφουν οι τρεις λογικές πράξεις για όλους τους συνδυασμούς τιμών των A και B.
Εικ. 4 Πίνακας αληθείας για τους βασικούς λογικούς τελεστές.¶
Η λογική έκφραση not Α είναι αληθής, όταν ηΑ ψευδής, και ψευδής, όταν η Α είναι αληθής. Η λογική έκφραση Α and B είναι αληθής μόνο όταν και η Α και η Β είναι αληθείς, σε κάθε άλλη περίπτωση είναι ψευδής. Η λογική έκφραση Α or Β είναι αληθής όταν η Α είναι αληθής ή η Β είναι αληθής, ή όταν και οι δύο είναι αληθείς.
Όταν χρησιμοποιούμε τον όρο and σημαίνει ότι και οι δύο προτάσεις πρέπει να είναι αληθείς για να αποδόσουν αληθές αποτέλεσμα. true.
Γενικά μπορούμε να συνοψίσουμε την χρήση του τελεστή and και την σύγκριση ανάμεσα σε τιμές boolean με βάση των παρακάτω πίνακα [Heisler, 2021]:
Συνδυασμός με τον τελεστή and |
Αποτέλεσμα |
|---|---|
True and True |
True |
True and False |
False |
False and True |
False |
False and False |
False |
Με την χρήση του όρου or αρκεί μία από τις δύο προτάσεις να είναι True για να αποδόσει αποτέλεσμα αληθές. Αυτό φαίνεται πιο καλά στο παραπάνω πίνακα:
Συνδυασμός με τον τελεστή or |
Αποτέλεσμα |
|---|---|
True or True |
True |
True or False |
True |
False or True |
True |
False or False |
False |
Τέλος με την χρήση του όρου not αντιστρέφεται η τιμή True ή False μιας πρότασης.
Επίδραση του τελεστή not |
Αποτέλεσμα |
|---|---|
not True |
False |
not False |
True |
Φυσικά μπορούμε να συνδυάσουμε να συνδυάσμουμε τους όρους and or και not και να διαχωρίσουμε τις συγκρίσεις με παρανθέσεις ώστε να δημιουργήσουμε πιο σύνθετες εκφράσεις σύγκρισης:
False or (False and True)
False
True and (False or True)
True
(not False) or True
True
False or (not False)
True
Σε μία λογική έκφραση μπορούμε να έχουμε και τελεστές σύγκρισης. Η Python έχει 6 τελεστές σύγκρισης:
Μικρότερο από ( < ) Μικρότερο/ίσο από (<=) Μεγαλύτερο από (>) Μεγαλύτερο/ίσο από (>=) Ίσο με( == ) Διαφορετικό από ( != ) Αυτοί οι τελεστές συγκρίνουν δύο τιμές και επιστρέφουν μια τιμή τύπου boolean δηλαδή είτε True είτε False.
Οι λογικές εκφράσεις χρησιμοποιούν παρενθέσεις και κανόνες προτεραιότητας, για να καθορίσουν τη σειρά αποτίμησης των τμημάτων από τα οποία αποτελούνται. Οι εκφράσεις μέσα σε παρενθέσεις αποτιμώνται πρώτες. Η προτεραιότητα των τελεστών, από τη μεγαλύτερη στη μικρότερη, είναι οι εξής:
<, >, <=, >=, !=, ==, not, and, or.
Προειδοποίηση
Προσοχή! Δεν πρέπει να συγχέεται ο τελεστής εκχώρησης τιμών σε μεταβλητή = με τον τελεστή ισότητας ==.
Μερικά παραδείγματα τελεστών σύγκρισης
print(1 != 2)
print(1 != 1)
True
False
a = 1
b = 2
print(a == b)
a = b
a==b
print(a!=b)
False
False
1< 2 and 3 < 4
True
2< 1 and 4 < 3
False
1< 2 and 4 < 3
False
2< 1 and 3 < 4
False
Τους τελεστές σύγκρισης μπορούμε να τους χρησιμοποιήσουμε και με συμβολοσειρές:
"dog" == "cat"
False
"dog" == "dog"
True
"dog" != "cat"
True
Για να είναι δύο συμβολοσειρές ίσες πρέπει να έχουν ακριβώς την ίδια τιμή. Διαφοροποιήσεις ανάμεσα σε κεφαλαία ή μικρά ή η ύπαρξη κενών ανάμεσα σε δύο μεταβλητές συμβολοσειρών θα αποδόσει False σε μια έκφραση σύγκρισης ισότητας δηλαδή ότι οι δύο συμβολοσειρές δεν είναι ίσες.
Μπορούμε να συνδυάσουμε τους τελεστές σύγκρισης με λογικές τιμές boolean και τους λογικούς τελεστές or, and και not.
Για παράδειγμα:
True and not (1 != 1)
True
("A" != "A") or not (2 >= 3)
True
α. Η δομή της ακολουθίας εντολών¶
Οι εντολές σε ένα πρόγραμμα εκτελούνται σειριακά η μία μετά την άλλη ξεκινώντας από την πρώτη. Τελειώνει η εκτέλεση μίας εντολής και ακολου- θεί η εκτέλεση της επόμενης. Κάθε εντολή θα εκτελεστεί ακριβώς μία φορά, χωρίς δηλαδή να παραλειφθεί καμία από αυτές ή να επιστρέψουμε για να ξα- ναεκτελέσουμε κάποια. Παρακάτω δίνεται ένα χαρακτηριστικό παράδειγμα δομής ακολουθίας εντολών.
A=1
B=5
C=A+B
print(C)
6
Σε αυτό το παράδειγμα οι εντολές εκτελούνται στο σύνολό τους, διαδοχικά η μία μετά την άλλη.
β. Η δομή της απόφασης¶
Στη δομή της απόφασης έχουμε μία περισσότερο πολύπλοκη δομή, στην οποία ο έλεγχος του προγράμματος καλείται να επιλέξει ανάμεσα σε δύο ή και περισσότερες διαφορετικές διαδρομές ανάλογα με το αν ισχύει ή όχι κάποια ή κάποιες συνθήκες. Για την υλοποίηση της απόφασης, κάθε γλώσσα μπορεί να έχει μία ή περισσότερες δομές. Η πιο συνηθισμένη είναι η δομή if, ενώ υπάρχει συνήθως και μία δομή για πολλαπλή απόφαση. Η Python έχει την if-elif-else για να υλοποιήσει την απόφαση, αλλά δεν έχει δομή για την πολλαπλή απόφαση και χρησιμοποιεί την if-elif-else για τον σκοπό αυτόν [Manis, 2015].
Η εντολή if χρησιμοποείται για έλεγχο της ροής εκτέλεσης ενός προγράμματος. Ελέγχεται μία συνθήκη και ανάλογα με το αποτέλεσμα (Αληθής ή Ψευδής) εκτελείται ή δεν εκτελείται μία ή κάποια άλλη ομάδα (μπλοκ) εντολών [Aγγελιδάκης, 2015]. Η εντολή if συντάσσεται ως εξής:
if συνθήκη:
μπλοκ εντολών 1 (true_block)
else:
μπλοκ εντολών (false_block)
Κατά την εκτέλεση του παρακάτω κώδικα η Python θα δοκιμάσει την έκφραση (expression). Αν επιστρέψει True τότε θα εκτελέσει τις προτάσεις κώδικα που περιλαμβάνει η ενότητα true_block. Αν επιστρέψει όμως False θα εκτελέσει τις εντολές στην ενότητα false_block. Στην πιο απλή της μορφή η δομή της απόφασης μπορεί να παραλείπει το else τμήμα και το αντίστοιχο μπλοκ εντολών δηλ:
if συνθήκη:
μπλοκ εντολών (true_block)
Παρατηρήστε ότι η εντολή if μετά τον έλεγχο της συνθήκης κλείνει με : και στην συνέχεια ακολουθούν με εσοχή (indentation) οι εντολές/προτάσεις που θα εκτελεστούν εφόσον αληθεύει το αποτέλεσμα του ελέγχου. Από : ακολουθείται και η εντολή else. Το μπλοκ της εντολής ονομάζεται σώμα (body). Πρέπει να περιέχει υποχρεωτικά μια εντολή. Αν προσωρινά δεν θέλουμε να περιέχει κάποια εντολή μπορούμε να εισάγουμε την εντολή pass. Ιδιαίτερη σημασία πρέπει να δίνεται κατά την σύνταξη κατά την χρήση δηλαδή του σημείου : και την εσοχή των εντολών. Παρακάτων δίνεται ένα απλό παράδειγμα δομής απόφασης:
weight = 100
if weight > 90:
print("Είστε υπέρβαρος.Παρακαλώ αποφύγετε τον ανελκυστήρα.")
print("Ευχαριστούμε για την συνεργασία.")
Είστε υπέρβαρος.Παρακαλώ αποφύγετε τον ανελκυστήρα.
Ευχαριστούμε για την συνεργασία.
Παράδειγμα κώδικα if-else:
temperature = 20
if temperature > 30:
print('Φορέστε κοντομάνικα.')
else:
print('Φορέστε μακρυμάνικα.')
print('Ευχαριστώ.')
Φορέστε μακρυμάνικα.
Ευχαριστώ.
Για να προσθέσουμε περισσότερες επιλογές κατά τον έλεγχο συνθηκών χρησιμοποιούμε την σύνταξη if-elif-else:
score=90
if score >= 90:
letter = 'A'
elif score >= 80:
letter = 'B'
elif score >= 70:
letter = 'C'
elif score >= 60:
letter = 'D'
else:
letter = 'F'
Οι συνθήκες if είναι δυνατόν να είναι αλυσιδωτές (εμφωλευμένες) δηλαδή if πρόταση μέσα σε άλλη if πρόταση:
num = 15
if num >= 0:
if num == 0:
print("Ο αριθμός δεν είναι ούτε αρνητικός ούτε θετικός")
else:
print("Ο αριθμός είναι θετικός")
else:
print("Ο αριθμός είναι θετικός")
Ο αριθμός είναι θετικός
γ. η δομή της επανάληψης¶
Η δομή της επανάληψης είναι μια μορφή κώδικα κατά την οποία περιλαμβάνει εντολές οι οποίες εκτελούνται επαναληπτικά για όσο τηρείται μια συνθήκη. Με αυτόν τον τρόπο αποφεύγεται η επανάληψη της συγγραφής του ίδιου κώδικα πολλές φορές. Στο παρακάτω τμήμα κώδικα είναι χαρακτηριστικό πως επαναλαμβάνεται ο ίδιος κώδικα πολλές φορές.
print("Hello World")
print("Hello World")
print("Hello World")
print("Hello World")
print("Hello World")
Hello World
Hello World
Hello World
Hello World
Hello World
Αυτό όμως θα μπορούσε να αποφευχθεί με την χρήση μια δομής επανάληψης. Μια δομή επανάληψη ονομάζεται και βρόγχος (loop). Οι δομές επανάληψης διαχωρίζονται σε 3 κατηγορίες:
ο βρόγχος while, ο οποίος επαναλαμβάνει μια πρόταση ή μια σειρά προτάσεων όσο ισχύει μια συνθήκη. Κάθε φορά που επαναλαμβάνεται ένας κύκλος εκτέλεσης δοκιμάζεται αν ισχύει η συνθήκη αυτή.
ο βρόγχος for, κατά τον οποίο επαναλαμβάνεται μια σειρά προτάσεων για κάθε ένα στοιχείο μιας ακολουθίας δεδομένων (πχ λίστας, πλειάδας, λεξικού κτλ.).
εμφωλευμένοι βρόγχοι, που ουσιαστικά πρόκειται για συνδυασμό βρόγχων while ή for. Έτσι μπορούμε να δομήσουμε ένα βρόγχο while μέσα σε έναν for, έναν for μέσα σε έναν while, έναν for μέσα σε έναν for και έναν while μέσα σε έναν while.
Παρακάτω δίνονται παραδείγματα για την κάθε κατηγορία.
Βρόγχος while
count = 0
while (count < 10):
count = count + 1
print("Hello World")
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
Βρόγχος for
fruits = ["Μήλο", "Κεράσι", "Αχλάδι"]
for x in fruits:
print(x)
Μήλο
Κεράσι
Αχλάδι
εμφωλευμένοι βρόγχοι (for μέσα σε for)
for i in range(1, 11):
# nested loop
# to iterate from 1 to 10
for j in range(1, 11):
# print multiplication
print(i * j, end=' ')
1 2 3 4 5 6 7 8 9 10 2 4 6 8 10 12 14 16 18 20 3 6 9 12 15 18 21 24 27
30 4 8 12 16 20 24 28 32 36 40 5 10 15 20 25 30 35 40 45 50 6 12 18 24 30 36 42 48 54 60 7 14 21 28 35 42 49 56 63 70 8 16 24 32 40 48 56 64 72 80 9 18 27 36 45 54 63 72 81 90 10 20 30 40 50 60 70 80 90 100
Οι βρόγχοι for πρέπει να εκτελούν κάποια πρόταση. Σε διαφορετική περίπτωση αν θέλουμε να τους χρησιμοποιήσουμε χωρίς να κάνουν τίποτα (πχ για να συγγράψουμε αργότερα το περιεχόμενό τους) μπορούμε να χρησιμοποιήσουμε την πρόταση pass.
for x in [0, 1, 2]:
pass
Μια χρήσιμη συνάρτηση που χρησιμοποιείται σε συνδυασμό με τους βρόγχους for είναι η συνάρτηση range(). Η συνάρτηση range δημιουργεί μια ακολουθία αριθμών και προσφέρει σχετικές παραμέτρους για την έναρξη και λήξη και το βήμα της ακολουθίας δηλαδή range(start, stop,step_size).
range(0, 10)
range(0, 10)
Σε συνδυασμό με τον βρόγχο for μπορούμε να επαναλάβουμε μια σειρά προτάσεων κώδικα για μια ακολουθία αριθμών.
genre = ['Φυσικά', 'Μαθηματικά', 'Χημεία']
# iterate over the list using index
for i in range(len(genre)):
print("Διαβάζω ", genre[i])
Διαβάζω Φυσικά
Διαβάζω Μαθηματικά
Διαβάζω Χημεία
εμφωλευμένοι βρόγχοι (while μέσα σε for)
names = ['Νίκος', 'Κώστας', 'Ελένη']
# outer loop
for name in names:
# inner while loop
count = 0
while count < 5:
print(name, end=' ')
# increment counter
count = count + 1
print()
Νίκος Νίκος Νίκος Νίκος Νίκος
Κώστας Κώστας Κώστας Κώστας Κώστας
Ελένη Ελένη Ελένη Ελένη Ελένη
εμφωλευμένοι βρόγχοι (while μέσα σε while)
i = 1
while i <= 4 :
j = 0
while j <= 3 :
print(i*j, end=" ")
j += 1
print()
i += 1
0 1 2 3
0 2 4 6
0 3 6 9
0 4 8 12
Η πρόταση else μέσα σε βρόγχους¶
Όταν η συνθήκη βάσει της οποία ελέγχεται η εκτέλεση ενός βρόγχου while αποτυγχάνει (δεν είναι αληθής) τότε μπορούμε να εκτελέσουμε μια άλλη σειρά προτάσεων που ορίζεται από την ενότητα else. Για παράδειγμα:
count=0
while(count<5):
print(count)
count +=1
else:
print("count value reached %d" %(count))
0
1
2
3
4
count value reached 5
Αντίστοιχα σε έναν βρόγχο for μπορούμε να εκτελέσουμε μια ομάδα προτάσεων που ορίζεται από το else όταν έχει εξαντληθεί η προσπέλαση όλων των στοιχείων μιας ακολουθίας. Δείτε το παρακάτω παράδειγμα:
for x in range(6):
print(x)
else:
print("Finally finished!")
0
1
2
3
4
5
Finally finished!
Οι προτάσεις break και continue¶
Οι προτάσεις break και continue χρησιμοποιούνται για το έλεγχο της ροής των επαναλήψεων και λειτουργούν με τον ίδιο τρόπο τόσο στους βρόγχους while όσο και στους βρόγχους for.
Η πρόταση break τερματίζει άμεσα την εκτέλεση του βρόγχου με βάση τον έλεγχο μιας συνθήκης και στην συνέχεια ακολουθεί η εκτέλεση της πρότασης που ακολουθεί τον βρόγχο.
Παράδειγμα με βρόγχο for:
for num in range(1, 11):
if num == 5:
break
else:
print(num)
print("Τέλος")
1
2
3
4
Τέλος
Παράδειγμα με βρόγχο while:
n = 5
while n > 0:
n -= 1
if n == 2:
break
print(n)
print('Loop ended.')
4
3
Loop ended.
Αντίστοιχη είναι η λειτουργία της πρότασης continue. Ωστόσο σε αυτήν την περίπτωση ο βρόγχος δεν τερματίζεται εντελώς αλλά σταματάει την τρέχουσα σειρά εντολών στο τρέχον σημείο του βρόγχου και συνεχίζει στο επόμενο στοιχείο της ακολουθίας και στον έλεγχο της αντίστοιχης συνθήκης.
7. Ανάγνωση & εγγραφή αρχείων, μετονομασία, αναζήτηση, αντιγραφή μετακίνηση αρχείων και καταλογών¶
Πριν ξεκινήσουμε την επίδειξη των εντολών για το σημερινό μάθημα, θα πρέπει να εισάγουμε μερικές απαραίτητες βιβλιοθήκες και να ορίσουμε τον τρέχων κατάλογο στη Python:
import os
import pickle
from pathlib import Path
from datetime import datetime, timezone
import fnmatch
import tempfile
from tempfile import TemporaryFile, TemporaryDirectory
import shutil
print(os.getcwd()) # εκτύπωση τρέχοντος καταλόγου στην Python
path="./some_directory/"
os.chdir(path) # ορισμός τρέχοντος καταλόγου
print(os.getcwd()) # επιβεβαίωση του τρέχοντος καταλόγου στην Python
/home/leonidas/Documents/uth/Programming/JupyterNotebooks/notes/notebooks
/home/leonidas/Documents/uth/Programming/JupyterNotebooks/notes/notebooks/some_directory
Ανάγνωση & εγγραφή αρχείων¶
Μπορούμε να ανοίξουμε ένα αρχείο με την μέθοδο open, να δούμε μερικές ιδιότητες του και να το κλείσουμε
myfile=open("foo.txt", "r")
print ("Name of the file: ", myfile.name)
print ("Closed or not : ", myfile.closed)
print ("Opening mode : ", myfile.mode)
myfile.close()
print(myfile.closed)
Name of the file: foo.txt
Closed or not : False
Opening mode : r
True
Με την μέθοδο write() σε ένα object ανοικτού αρχείου (TextIOWrapper object πιο συγκεκριμένα) μπορούμε να γράψουμε σε αυτό περιεχόμενο. Κατά το open δίνουμε σαν παράμετρους το όνομα του αρχείου και την επιλογή προσπέλασης «w» (όπου w= εγγραφή, r= ανάγνωση, a=προσθήκη). Το w μας επιτρέπει την δυνατότητα εγγραφής. Πάντα πρέπει να κλείνουμε το ανοικτό αρχείο με την μέθοδο close().
# Open a file
fo = open("foo.txt", "w") # Σημαντική παράμετρος το "w"
fo.write( "Ένα ταξίδι χιλίων χιλιομέτρων αρχίζει με ένα βήμα.\nΛάο Τσε, 6ος αιώνας π.Χ., Κινέζος φιλόσοφος")
# Close opend file
fo.close()
Επιβεβαιώνουμε ότι όντως έγινε η εγγραφή ξαναδιαβάζοντας το αρχείο με την μέθοδο read() η οποία διαβάζει το συνολικό περιεχόμενο από το αρχείο.
# Open a file
fo = open("foo.txt", "r") # Σημαντική παράμετρος το "w"
text = fo.read()
print (text)
# Close opened file
fo.close()
Ένα ταξίδι χιλίων χιλιομέτρων αρχίζει με ένα βήμα.
Λάο Τσε, 6ος αιώνας π.Χ., Κινέζος φιλόσοφος
Επειδή υπάρχει ο κίνδυνος να καλέσουμε την μέθοδο close() σε ένα ανοικτό αρχείο, μπορούμε εναλλακτικά να ανοίξουμε ένα αρχείο με το with. Σε αυτήν την περίπτωση το αρχείο κλείνει αυτόματα όταν ολοκληρωθεί το μπλοκ εντολών εντός του with.
with open('foo.txt', 'r') as reader:
print(reader.read())
Ένα ταξίδι χιλίων χιλιομέτρων αρχίζει με ένα βήμα.
Λάο Τσε, 6ος αιώνας π.Χ., Κινέζος φιλόσοφος
Η μέθοδος read() δέχεται σαν όρισμα τον αριθμό των bytes που θα επιστρέψει.
with open('foo.txt', 'r') as fo:
text = fo.read(5)
print (text)
text = fo.read(10)
print (text)
Ένα τ
αξίδι χιλί
Με την χρήση της μεθόδου readlines() προσαρτούμε κάθε γραμμή που υπάρχει στο αρχείο σε μια λίστα. Όμως ο χαρακτήρας που ορίζει την νέα σειρά (\n) δεν αγνοείται από την ανάγνωση.
with open('dog_breeds.txt', 'r') as reader:
# Note: readlines doesn't trim the line endings
dog_breeds = reader.readlines()
dog_breeds = [line.rstrip() for line in dog_breeds] # μπορούμε να αφαιρέσουμ τα new line characters με αυτόν τον τρόπο
print(dog_breeds)
['Pug', 'Jack Russell Terrier', 'English Springer Spaniel', 'German Shepherd', 'Staffordshire Bull Terrier', 'Cavalier King Charles Spaniel', 'Golden Retriever', 'West Highland White Terrier', 'Boxer', 'Border Terrier', 'Beagle', 'Beagle', 'Beagle', 'Beagle', 'Beagle', 'Beagle', 'Beagle', 'Beagle', 'Beagle', 'Beagle', 'Beagle', 'Beagle', 'Beagle', 'Beagle', 'Beagle', 'Beagle', 'Beagle', 'Beagle', 'Beagle', 'Beagle', 'Beagle', 'Beagle', 'Beagle', 'Beagle', 'Beagle', 'Beagle', 'Beagle', 'Beagle', 'Beagle', 'Beagle', 'Beagle', 'Beagle', 'Beagle', 'Beagle', 'Beagle', 'Beagle', 'Beagle']
Με την χρήση του with μπορούμε να εγγράψουμε δεδομένα κιόλας. Σημαντική παράμετρος το “w” κατά το open() και η μέθοδος write().
with open('dog_breeds_reversed.txt', 'w') as writer:
# Alternatively you could use
# writer.writelines(reversed(dog_breeds))
# Write the dog breeds to the file in reversed order
for breed in reversed(dog_breeds):
writer.write(breed)
Με το όρισμα “a” (append) κατά το άνοιγμα ενός αρχείου μπορούμε να εγγράψουμε σε ένα αρχείο χωρίς να διαγραφεί το προηγούμενο περιεχόμενο.
with open('dog_breeds.txt', 'a') as a_writer:
a_writer.write('Beagle\n')
with open('dog_breeds.txt', 'r') as reader:
print(reader.read())
Pug
Jack Russell Terrier
English Springer Spaniel
German Shepherd
Staffordshire Bull Terrier
Cavalier King Charles Spaniel
Golden Retriever
West Highland White Terrier
Boxer
Border Terrier
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Μπορούμε να χρησιμοποιήσουμε παράλληλα δύο αρχείa με τις αντίστοιχες παραμέτρους ανάγνωσης, ή εγγραφής ή προσθήκης μέσω του with ως εξής:
d_path = 'dog_breeds.txt'
d_r_path = 'dog_breeds_reversed.txt'
with open(d_path, 'r') as reader, open(d_r_path, 'w') as writer:
dog_breeds = reader.readlines()
writer.writelines(reversed(dog_breeds))
Ανάγνωση αρχείου ανά γραμμή μέσω βρόγχου while και της μεθόδου readline():
with open('dog_breeds.txt', 'r') as reader:
# Read and print the entire file line by line
line = reader.readline()
while line != '': # The EOF char is an empty string
print(line, end='')
line = reader.readline()
Pug
Jack Russell Terrier
English Springer Spaniel
German Shepherd
Staffordshire Bull Terrier
Cavalier King Charles Spaniel
Golden Retriever
West Highland White Terrier
Boxer
Border Terrier
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Μπορούμε να διαβάσουμε γραμμή - γραμμή το περιεχόμενο ενός αρχείου μέσω ενός loop στην λίστα γραμμών που μας προσφέρει η μέθοδος readlines()
with open('dog_breeds.txt', 'r') as reader:
for line in reader.readlines():
print(line, end='')
Pug
Jack Russell Terrier
English Springer Spaniel
German Shepherd
Staffordshire Bull Terrier
Cavalier King Charles Spaniel
Golden Retriever
West Highland White Terrier
Boxer
Border Terrier
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Και για περισσότερο ευανάγνωστο κώδικα η Python μας δίνει την δυνατότητα να κάνουμε loop μέσω του reader object
with open('dog_breeds.txt', 'r') as reader:
# Read and print the entire file line by line
for line in reader:
print(line, end='') # use end='' το avoid new line after each print statement
Pug
Jack Russell Terrier
English Springer Spaniel
German Shepherd
Staffordshire Bull Terrier
Cavalier King Charles Spaniel
Golden Retriever
West Highland White Terrier
Boxer
Border Terrier
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Beagle
Σειριοποίηση (pickle)¶
Στα προηγούμενα παραδείγματα διαβάσαμε ή γράψαμε συμβολοσειρές σε ένα αρχειο. Όμως, μέσω της σειριοποίησης μπορούμε να αποθηκεύσουμε σε ένα binary αρχείο τα αντικείμενα της python με τις ιδιότητές τους. Όχι μόνον σαν απλές συμβολοσειρές. Στο παρακάτω κομμάτι κώδικα θα αποθηκεύσουμε μία λίστα και μια μεταβλήτή σε ένα αρχείο με την βοήθεια της βιβλιοθήκης pickle.
mylist=['one', 2 , 'tree']
pi=3.14
with open('pickle.txt', 'ab') as pickle_writer:
pickle.dump(mylist, pickle_writer)
pickle.dump(pi, pickle_writer)
Αφού έχουμε αποθηκεύσει τα σχετικά object σε ένα αρχείο, μπορούμε σε μεταγενέστερα στάδια του κώδικα να τα ανακαλέσουμε αυτούσια μέσω της ανάγνωσης αυτού του αρχείου.
with open('pickle.txt', 'rb') as pickle_read:
pickle.load(pickle_read)
print(pi)
print(mylist)
3.14
['one', 2, 'tree']
Ανάκτηση περιεχομένων φακέλου¶
Μέσω της μεθόδου os.scandir() μπορούμε να λάβουμε μια λίστα με τα αρχεία και τους φακέλους σε ένα κατάλογο.
entries = os.scandir('./')
for entry in entries:
print(entry.name)
sub_dir2
sub_dir
dog_breeds_reversed.txt
sub_dir3
data_02.txt
foo.txt
data_02_backup.txt
data_03_backup.txt
data_01_backup.txt
dog_breeds.txt
2018
example_directory
pickle.txt
file1.py
data_03.txt
data_01.txt
tests.py
admin.py
admin2.py
# εναλλακτικά
os.listdir('./')
['sub_dir2',
'sub_dir',
'dog_breeds_reversed.txt',
'sub_dir3',
'data_02.txt',
'foo.txt',
'data_02_backup.txt',
'data_03_backup.txt',
'data_01_backup.txt',
'dog_breeds.txt',
'2018',
'example_directory',
'pickle.txt',
'file1.py',
'data_03.txt',
'data_01.txt',
'tests.py',
'admin.py',
'admin2.py']
# Εναλλακτικά μέσω πρόταση with
with os.scandir('./') as entries:
for entry in entries:
print(entry.name)
sub_dir2
sub_dir
dog_breeds_reversed.txt
sub_dir3
data_02.txt
foo.txt
data_02_backup.txt
data_03_backup.txt
data_01_backup.txt
dog_breeds.txt
2018
example_directory
pickle.txt
file1.py
data_03.txt
data_01.txt
tests.py
admin.py
admin2.py
To ίδιο μπορούμε να κάνουμε με την μέθοδο iterdir() σε ένα Path object από την βιβλιοθήκη pathlib
entries = Path('./')
for entry in entries.iterdir():
print(entry.name)
sub_dir2
sub_dir
dog_breeds_reversed.txt
sub_dir3
data_02.txt
foo.txt
data_02_backup.txt
data_03_backup.txt
data_01_backup.txt
dog_breeds.txt
2018
example_directory
pickle.txt
file1.py
data_03.txt
data_01.txt
tests.py
admin.py
admin2.py
Η μέθοδος is_file() μας επιτρέπει να τεστάρουμε αν ένα αντικείμενο τύπου Path είναι αρχείο.
basepath = Path('./')
files_in_basepath = basepath.iterdir()
for item in files_in_basepath:
if item.is_file():
print(item.name)
dog_breeds_reversed.txt
data_02.txt
foo.txt
data_02_backup.txt
data_03_backup.txt
data_01_backup.txt
dog_breeds.txt
pickle.txt
file1.py
data_03.txt
data_01.txt
tests.py
admin.py
admin2.py
Επιπλέον για ένα path μπορούμε να λάβουμε την απόλυτη μορφή του (absolute path) μέσω της συνάρτησης os.path.abspath()
τον κατάλογο στον οποίο βρίσκεται (μέσω της συνάρτησης dirname()) και το όνομα του αρχείου (με os.path.basename())
path="./foo.txt" # relative path
abspath = os.path.abspath(path) # absolute path
print(abspath)
print(os.path.dirname(abspath)) # όνομα καταλόγου που βρίσκεται το αρχείο
print(os.path.basename(abspath)) # όνομα αρχείου (filename)
/home/leonidas/Documents/uth/Programming/JupyterNotebooks/notes/notebooks/some_directory/foo.txt
/home/leonidas/Documents/uth/Programming/JupyterNotebooks/notes/notebooks/some_directory
foo.txt
Η μέθοδος is_dir() μας επιτρέπει να τεστάρουμε αν ένα αντικείμενο τύπου Path είναι φάκελος (directory).
# List all subdirectory using pathlib
basepath = Path('.')
for entry in basepath.iterdir():
if entry.is_dir():
print(entry.name)
sub_dir2
sub_dir
sub_dir3
2018
example_directory
Με την μέθοδο stat() μπορούμε να δούμε χρήσιμες λεπτομέρειες για ένα αρχείο και να ανακτήσουμε δεδομένα όπως το μέγεθος του, το όνομά του και η τελευταία ημερομηνία/ώρα τροποποίησης (δίνεται σε seconds απο την 1/1/1970)
current_dir = Path('./') #ορίστε έναν φάκελο. Στην συγκεκριμένη περίπτωση ορίζεται ο τρέχον κατάλογος.
for path in current_dir.iterdir():
info = path.stat()
size=info.st_size
modification_time=datetime.fromtimestamp(info.st_mtime, tz=timezone.utc) # st_time= the number of seconds passed since 1st January 1970 (epoch)
name=path.name
print("\nΌνομα αρχείου:", name)
print("\tΜέγεθος: ",size) # το μέγεθος του αρχείου σε bytes
print("\tΗμερομηνία τελευταίας τροποποίησης", modification_time)
Όνομα αρχείου: sub_dir2
Μέγεθος: 4096
Ημερομηνία τελευταίας τροποποίησης 2022-05-13 15:51:20+00:00
Όνομα αρχείου: sub_dir
Μέγεθος: 4096
Ημερομηνία τελευταίας τροποποίησης 2022-05-13 15:51:20+00:00
Όνομα αρχείου: dog_breeds_reversed.txt
Μέγεθος: 455
Ημερομηνία τελευταίας τροποποίησης 2022-05-30 08:44:05.437593+00:00
Όνομα αρχείου: sub_dir3
Μέγεθος: 4096
Ημερομηνία τελευταίας τροποποίησης 2022-05-13 15:51:20+00:00
Όνομα αρχείου: data_02.txt
Μέγεθος: 0
Ημερομηνία τελευταίας τροποποίησης 2022-05-13 07:01:42+00:00
Όνομα αρχείου: foo.txt
Μέγεθος: 168
Ημερομηνία τελευταίας τροποποίησης 2022-05-30 08:44:05.353593+00:00
Όνομα αρχείου: data_02_backup.txt
Μέγεθος: 0
Ημερομηνία τελευταίας τροποποίησης 2022-05-13 07:01:42+00:00
Όνομα αρχείου: data_03_backup.txt
Μέγεθος: 0
Ημερομηνία τελευταίας τροποποίησης 2022-05-13 07:01:42+00:00
Όνομα αρχείου: data_01_backup.txt
Μέγεθος: 0
Ημερομηνία τελευταίας τροποποίησης 2022-05-13 07:01:42+00:00
Όνομα αρχείου: dog_breeds.txt
Μέγεθος: 455
Ημερομηνία τελευταίας τροποποίησης 2022-05-30 08:44:05.421593+00:00
Όνομα αρχείου: 2018
Μέγεθος: 4096
Ημερομηνία τελευταίας τροποποίησης 2022-05-13 18:28:15.820793+00:00
Όνομα αρχείου: example_directory
Μέγεθος: 4096
Ημερομηνία τελευταίας τροποποίησης 2022-05-13 18:28:15.800793+00:00
Όνομα αρχείου: pickle.txt
Μέγεθος: 2087
Ημερομηνία τελευταίας τροποποίησης 2022-05-30 08:44:05.505593+00:00
Όνομα αρχείου: file1.py
Μέγεθος: 0
Ημερομηνία τελευταίας τροποποίησης 2022-05-13 07:01:42+00:00
Όνομα αρχείου: data_03.txt
Μέγεθος: 0
Ημερομηνία τελευταίας τροποποίησης 2022-05-13 07:01:42+00:00
Όνομα αρχείου: data_01.txt
Μέγεθος: 0
Ημερομηνία τελευταίας τροποποίησης 2022-05-13 07:01:42+00:00
Όνομα αρχείου: tests.py
Μέγεθος: 0
Ημερομηνία τελευταίας τροποποίησης 2022-05-13 07:01:42+00:00
Όνομα αρχείου: admin.py
Μέγεθος: 0
Ημερομηνία τελευταίας τροποποίησης 2022-05-13 07:01:42+00:00
Όνομα αρχείου: admin2.py
Μέγεθος: 0
Ημερομηνία τελευταίας τροποποίησης 2022-05-29 20:05:15.828766+00:00
Μέσω του Path μπορούμε να φτιάξουμε και διαδρομές προς ένα κατάλογο του δίσκου μας όπως περιγράφεται παρακάτω:
# δημιουργία paths
in_file_1 = Path.cwd() / "in" / "input.xlsx"
out_file_1 = Path.cwd() / "out" / "output.xlsx"
print(in_file_1)
print(out_file_1)
# ή
in_file_2 = Path.cwd().joinpath("in").joinpath("input.xlsx")
out_file_2 = Path.cwd().joinpath("out").joinpath("output.xlsx")
/home/leonidas/Documents/uth/Programming/JupyterNotebooks/notes/notebooks/some_directory/in/input.xlsx
/home/leonidas/Documents/uth/Programming/JupyterNotebooks/notes/notebooks/some_directory/out/output.xlsx
Δημιουργία καταλόγων¶
Στόχος είναι η δημιουργία νέων καταλόγων (directories) στο σύστημα αρχείων του υπολογιστή μας.
Πριν ξεκινήσουμε, επιβεβαιώνουμε για μια ακόμη φορά τον τρέχοντα κατάλογο
path = Path.cwd() # pathlib object, εναλλακτικό του os.getcwd()
print(str(path)) # print σαν συμβολοσειρά
/home/leonidas/Documents/uth/Programming/JupyterNotebooks/notes/notebooks/some_directory
Μπορούμε να δημιουργήσουμε καταλόγους με την μέθοδο mkdir()
# create directory
try:
p = Path('example_directory/') # ορισμός absolute ή relative Path
p.mkdir() # δημιουργία καταλόγου
except FileExistsError:
print(f"Ο κατάλογος {str(p)} υπάρχει ήδη")
Ο κατάλογος example_directory υπάρχει ήδη
p.mkdir(exist_ok=True) # δημιουργία καταλόγου, αγνοεί την δημιουργία φακέλου αν αυτός υπάρχει ήδη
p = Path('2018/10/05') # δημιουργία καταλόγου 05 και όλων των γονικών (parent) καταλόγων
p.mkdir(parents=True,exist_ok=True)
Είτε να αναζητήσουμε αρχεία και καταλόγους που περιλαμβάνουν συγκεκριμένους χαρακτήρες στο ονομά τους
content = os.listdir('./')
print(content)
print("Εύρεση αρχείων με καταληξη txt\n")
for file_name in content:
if fnmatch.fnmatch(file_name, '*.txt'):
print(file_name)
['sub_dir2', 'sub_dir', 'dog_breeds_reversed.txt', 'sub_dir3', 'data_02.txt', 'foo.txt', 'data_02_backup.txt', 'data_03_backup.txt', 'data_01_backup.txt', 'dog_breeds.txt', '2018', 'example_directory', 'pickle.txt', 'file1.py', 'data_03.txt', 'data_01.txt', 'tests.py', 'admin.py', 'admin2.py']
Εύρεση αρχείων με καταληξη txt
dog_breeds_reversed.txt
data_02.txt
foo.txt
data_02_backup.txt
data_03_backup.txt
data_01_backup.txt
dog_breeds.txt
pickle.txt
data_03.txt
data_01.txt
Εύρεση όλων των αρχείων στον τρέχοντα κατάλογο που το όνομά τους έχει την παρακάτω μορφή:
data_*_backup.txt
το αστεράκι (*) αντιπροσωπεύει οποιοδήποτε αριθμό χαρακτήρων μέσα στο όνομα.
for filename in os.listdir('./'):
if fnmatch.fnmatch(filename, 'data_*_backup.txt'):
print(filename)
data_02_backup.txt
data_03_backup.txt
data_01_backup.txt
Εναλλακτικά με την χρήση της μεθόδου glob()
p = Path('.')
for name in p.glob('data_*_backup.txt'):
print(name)
data_02_backup.txt
data_03_backup.txt
data_01_backup.txt
p = Path('.')
for name in p.glob('*[0-9]*backup.txt'):
print(name)
data_02_backup.txt
data_03_backup.txt
data_01_backup.txt
Οι παραπάνω αναζητήσεις αφορούσαν το περιεχόμενο μόνο στον τρέχοντα κατάλογο και όχι ταυτόχρονα και στους υποκαταλόγους (child) που υπάρχουν μέσα σε αυτόν. Για να αναζητήσουμε διαδοχικά και σε αυτούς τους καταλόγους χρησιμοποιούμε το παρακάτω πρόθεμα πριν από το κριτήριο αναζήτησης **/
# Append "**/" before the search term in pattern to recursively search this directory
p = Path('.')
for name in p.glob('**/*.py'):
print(name)
file1.py
tests.py
admin.py
admin2.py
sub_dir2/file2.py
sub_dir2/file1.py
sub_dir/file2.py
sub_dir/file1.py
sub_dir3/file2.py
sub_dir3/file1.py
# αναζήτηση για ότι περιέχει f και 1 στο filename
p = Path('.')
for name in p.glob('**/f*1*'):
print(name)
file1.py
sub_dir2/file1.py
sub_dir/file1.py
sub_dir3/file1.py
Για να ανατρέξουμε διαδοχικά σε όλους του φακέλους ενός καταλόγου χρησιμοποιούμε την μέθοδo os.walk
# walk
# Walking a directory tree and printing the names of the directories and files
for dirpath, dirnames, files in os.walk('.', topdown=False):
print(f'Found directory: {dirpath}')
for file_name in files:
print(file_name)
Found directory: ./sub_dir2
file2.py
file1.py
Found directory: ./sub_dir
file2.py
file1.py
Found directory: ./sub_dir3
file2.py
file1.py
Found directory: ./2018/10/05
Found directory: ./2018/10
Found directory: ./2018
Found directory: ./example_directory
Found directory: .
dog_breeds_reversed.txt
data_02.txt
foo.txt
data_02_backup.txt
data_03_backup.txt
data_01_backup.txt
dog_breeds.txt
pickle.txt
file1.py
data_03.txt
data_01.txt
tests.py
admin.py
admin2.py
Προσωρινά αρχεία και κατάλογοι¶
Με την python μπορούμε να δημιουργήσουμε προσωρινά αρχεία και καταλόγους οι οποιού παύουν να υπάρχουν μετά την εκτέλεση του κώδικα. Αυτό γίνεται με την βοήθεια του αρθρώματος (module) tempfile και της συνάρτησης TemporaryFile() και TemporaryDirectory()
from tempfile import TemporaryFile
# temporary files
with TemporaryFile('w+t') as fp: # άνοιγμα προσωρινού αρχείου για εγγραφή
fp.write('Hello universe!')
fp.seek(0)
print(fp.read())
# File is now closed and removed
Hello universe!
with TemporaryDirectory() as tmpdir:
print('Created temporary directory ', tmpdir)
print(tmpdir)
print(os.path.exists(tmpdir))
# Directory contents have been removed
Created temporary directory /tmp/tmpoe26yll4
/tmp/tmpoe26yll4
True
Αφού έχουμε εξέλθει από τον block κώδικα with το προσωρινό directory παύει να υπάρχει
os.path.exists(tmpdir)
False
Διαγραφή αρχείων και φακέλων¶
Με την μέθοδο unlink() μπορούμε να διαγράψουμε έναν άδειο κατάλογο ή ένα αρχείο.
data_file = Path('./data_04.txt')
if data_file.is_file():
print ("Το αρχείο υπάρχει και θα διαγραφεί")
data_file.unlink()
else:
print ("Το αρχείο δεν υπάρχει")
Το αρχείο δεν υπάρχει
Για την διαγραφή άδειου φακέλου καλούμε την μέθοδο rmdir() στο Path object.
my_dir = Path('./tmp')
if my_dir.is_dir():
print ("Το directory υπάρχει και θα διαγραφεί")
my_dir.rmdir()
else:
print ("Το directory δεν υπάρχει")
Το directory δεν υπάρχει
Αν θέλουμε να διαγράψουμε έναν κατάλογο ο οποίος περιλαμβάνει και περιεχόμενα τότε χρησιμοποιούμε η συνάρτηση rmtree() από την βιβλιοθήκη shutil.
# διαγραφή φακέλου με περιεχόμενα
dest = Path('./tmp2')
shutil.rmtree(dest, ignore_errors=True)
Αντιγραφή αρχείων και φακέλων¶
Ταυτόχρονα μπορούμε να αντιγράψουμε αρχεία με την συνάρτηση copy() πάλι από το άρθρωμα shutil.
# Αντιγραφή αρχείου
src = 'admin.py'
dst = 'admin2.py'
shutil.copy(src, dst)
'admin2.py'
ή ολόκληρους καταλόγους μέσω της συνάρτησης copytree() πάλι από το ίδιο άρθρωμα.
try:
shutil.copytree('sub_dir', 'sub_dir3')
except:
print("Σφάλμα κατά την αντιγραφη")
Σφάλμα κατά την αντιγραφη
Μετακίνηση¶
ή ακόμα και να μετακινήσουμε αρχεία και καταλόγους με την συναρτηση move()
try:
shutil.move('data_04.txt', 'sub_dir/data_04.txt')
except FileNotFoundError:
print("File does not exist")
File does not exist
# μετακίνηση αρχείου και μάλιστα με μετονομασία κατά την μετακίνηση data_04.txt -> data_05.txt
try:
shutil.move('sub_dir/data_04.txt', 'data_05.txt' )
except FileNotFoundError:
print("File does not exist")
File does not exist
# μετακίνηση φακέλου
try:
shutil.move('tmp2', 'tmp/tmp2')
except FileNotFoundError:
print("Directory does not exist")
Directory does not exist
# επιστροφή στην θέση του
try:
shutil.move('tmp/tmp2','tmp2')
except FileNotFoundError:
print("Directory does not exist")
Directory does not exist
Μετονομασία¶
Με την χρήση της μεθόδου rename() σε έναν Path αντικείμενο μπορούμε να το μετονομάσουμε.
# αρχείου
data_file = Path('data_01.txt')
data_file.rename('data.txt')
PosixPath('data.txt')
# ξανά όπως ήταν
data_file = Path('data.txt')
data_file.rename('data_01.txt')
PosixPath('data_01.txt')
Βιβλιογραφία¶
Aγγελιδάκης, Ν., 2015. Εισαγωγή στον προγραμματισμό με την Python. Αγγελιδάκης, Ηράκλειο.
Working With Files in Python, https://realpython.com/read-write-files-python/, Πρόσβαση: 13/05/2022
Reading and Writing Files in Python, https://realpython.com/read-write-files-python, Πρόσβαση: 13/05/2022
8. Ανάγνωση αρχείων csv, η βιβλιοθήκη pandas¶
Στόχος του μαθήματος είναι να εξοικειωθεί ο φοιτητής με την ανάγνωση και εγγραφή αρχείων CSV. Επίσης γίνεται μια σύντομη αναφορά στις δυνατότητες της βιβλιοθήκης pandas όσον αφορά την διαχείριση δεδομένων σε μορφή πινάκων.
Ανάγνωση αρχείων csv¶
Εισάγουμε τα απαραίτητα άρθρωματα (modules).
import os # μας επιτρέπει να έχουμε αλληλεπίδραση με το λειτουργικό σύστημα
import csv # απαραίτητο για την ανάγνωση και εγγραφή αρχείων CSV
from urllib import request # απαραίτητο για την λήψη αρχείων από το διαδίκτυο
import pandas as pd # η βιβλιοθήκη pandas για την διαχείρηση πινάκων
from pathlib import Path # βιβλιοθήκη για την διαχείριση των διαδρομών (paths) στον δίσκο
import numpy as np
Προαιρετικά ελέγχουμε ποιος είναι ο τρέχων κατάλογος:
print(os.getcwd())
/home/leonidas/Documents/uth/Programming/JupyterNotebooks/notes/notebooks
Αρχικά κατεβάζουμε από το διαδίκτυο τα αναγκαία αρχεία CSV.
(Πηγή δεδομένων https://www.kaggle.com/datasets/rinichristy/covid19-coronavirus-pandemic)
# Πρώτο αρχείο
remote_url = 'https://raw.githubusercontent.com/kokkytos/programming/main/docs/COVID-19%20Coronavirus.csv'
# Define the local filename to save data
local_file1 = 'COVID-19_Coronavirus.csv'
# Download remote and save locally
request.urlretrieve(remote_url, local_file1)
# Δεύτερο αρχείο
remote_url = 'https://raw.githubusercontent.com/kokkytos/programming/main/docs/COVID-19%20Coronavirus_V2.csv'
# Define the local filename to save data
local_file2 = 'COVID-19_Coronavirus_V2.csv'
# Download remote and save locally
request.urlretrieve(remote_url, local_file2)
('COVID-19_Coronavirus_V2.csv', <http.client.HTTPMessage at 0x7f4403a9edd0>)
with open(local_file1, 'r') as file:
reader = csv.reader(file)
for row in reader:
print(row)
['Country', 'Other names', 'ISO 3166-1 alpha-3 CODE', 'Population', 'Continent', 'Total Cases', 'Total Deaths', 'Tot\xa0Cases//1M pop', 'Tot\xa0Deaths/1M pop', 'Death percentage']
['Afghanistan', 'Afghanistan', 'AFG', '40462186', 'Asia', '177827', '7671', '4395', '190', '4.313743132']
['Albania', 'Albania', 'ALB', '2872296', 'Europe', '273870', '3492', '95349', '1216', '1.275057509']
['Algeria', 'Algeria', 'DZA', '45236699', 'Africa', '265691', '6874', '5873', '152', '2.587215976']
['Andorra', 'Andorra', 'AND', '77481', 'Europe', '40024', '153', '516565', '1975', '0.382270638']
['Angola', 'Angola', 'AGO', '34654212', 'Africa', '99194', '1900', '2862', '55', '1.915438434']
['Anguilla', 'Anguilla', 'AIA', '15237', 'Latin America and the Caribbean', '2700', '9', '177200', '591', '0.333333333']
['Antigua and Barbuda', 'Antigua and Barbuda', 'ATG', '99348', 'Latin America and the Caribbean', '7493', '135', '75422', '1359', '1.801681569']
['Argentina', 'Argentina', 'ARG', '45921761', 'Latin America and the Caribbean', '9041124', '128065', '196881', '2789', '1.416472111']
['Armenia', 'Armenia', 'ARM', '2972939', 'Asia', '422574', '8617', '142140', '2898', '2.039169471']
['Aruba', 'Aruba', 'ABW', '107560', 'Latin America and the Caribbean', '34051', '212', '316577', '1971', '0.622595518']
['Australia', 'Australia', 'AUS', '26017767', 'Oceania', '4680816', '6384', '179908', '245', '0.136386476']
['Austria', 'Austria', 'AUT', '9096360', 'Europe', '3887355', '15985', '427353', '1757', '0.411205048']
['Azerbaijan', 'Azerbaijan', 'AZE', '10299156', 'Asia', '792061', '9697', '76905', '942', '1.224274393']
['Bahamas', 'Bahamas', 'BHM', '399822', 'Latin America and the Caribbean', '33295', '788', '83275', '1971', '2.36672173']
['Bahrain', 'Bahrain', 'BHR', '1804995', 'Asia', '556241', '1471', '308168', '815', '0.264453717']
['Bangladesh', 'Bangladesh', 'BGD', '167561502', 'Asia', '1951770', '29122', '11648', '174', '1.492081546']
['Barbados', 'Barbados', 'BRB', '287991', 'Latin America and the Caribbean', '59938', '375', '208125', '1302', '0.625646501']
['Belarus', 'Belarus', 'BLR', '9443882', 'Europe', '965322', '6844', '102217', '725', '0.708986224']
['Belgium', 'Belgium', 'BEL', '11677924', 'Europe', '3851048', '30826', '329772', '2640', '0.800457434']
['Belize', 'Belize', 'BLZ', '410260', 'Latin America and the Caribbean', '57289', '656', '139641', '1599', '1.14507148']
['Benin', 'Benin', 'BEN', '12678649', 'Africa', '26952', '163', '2126', '13', '0.604778866']
['Bermuda', 'Bermuda', 'BMU', '61875', 'Northern America', '12564', '128', '203055', '2069', '1.018783827']
['Bhutan', 'Bhutan', 'BTN', '786480', 'Asia', '31437', '12', '39972', '15', '0.038171581']
['Bolivia', 'Bolivia (Plurinational State of)', 'BOL', '11951714', 'Latin America and the Caribbean', '902448', '21896', '75508', '1832', '2.426289382']
['Bosnia and Herzegovina', 'Bosnia and Herzegovina', 'BIH', '3245097', 'Europe', '375693', '15719', '115773', '4844', '4.184001299']
['Botswana', 'Botswana', 'BWA', '2434708', 'Africa', '305526', '2686', '125488', '1103', '0.879139582']
['Brazil', 'Brazil', 'BRA', '215204501', 'Latin America and the Caribbean', '29999816', '660269', '139401', '3068', '2.200910166']
['British Virgin Islands', 'British Virgin Islands', 'VGB', '30583', 'Latin America and the Caribbean', '6155', '62', '201256', '2027', '1.007311129']
['Brunei ', 'Brunei Darussalam', 'BRN', '444812', 'Asia', '135974', '213', '305689', '479', '0.156647594']
['Bulgaria', 'Bulgaria', 'BGR', '6856886', 'Europe', '1140679', '36568', '166355', '5333', '3.205809873']
['Burkina Faso', 'Burkina Faso', 'BFA', '21905848', 'Africa', '20853', '382', '952', '17', '1.831870714']
['Burundi', 'Burundi', 'BDI', '12510155', 'Africa', '38519', '38', '3079', '3', '0.098652613']
['Cabo Verde', 'Cabo Verde', 'CPV', '566557', 'Africa', '55960', '401', '98772', '708', '0.716583274']
['Cambodia', 'Cambodia', 'KHM', '17123941', 'Asia', '135747', '3054', '7927', '178', '2.249773476']
['Cameroon', 'Cameroon', 'CMR', '27701805', 'Africa', '119544', '1927', '4315', '70', '1.611958777']
['Canada', 'Canada', 'CAN', '38321435', 'Northern America', '3499226', '37690', '91312', '984', '1.077095335']
['CAR', 'Central African Republic', 'CAF', '4976719', 'Africa', '14649', '113', '2944', '23', '0.771383712']
['Caribbean Netherlands', 'Bonaire, Sint Eustatius and Saba', 'BES', '26650', 'Latin America and the Caribbean', '8574', '33', '321726', '1238', '0.384884535']
['Cayman Islands', 'Cayman Islands', 'CYM', '67073', 'Latin America and the Caribbean', '20606', '24', '307218', '358', '0.116470931']
['Chad', 'Chad', 'TCD', '17250246', 'Africa', '7308', '191', '424', '11', '2.613574165']
['Channel Islands', 'Guernsey', 'GGY', '176668', 'Europe', '69036', '156', '390767', '883', '0.22596906']
['Chile', 'Chile', 'CHL', '19403451', 'Latin America and the Caribbean', '3486653', '56750', '179692', '2925', '1.627635443']
['China', 'China', 'CHN', '1439323776', 'Asia', '154738', '4638', '108', '3', '2.99732451']
['Colombia', 'Colombia', 'COL', '51832231', 'Latin America and the Caribbean', '6085926', '139660', '117416', '2694', '2.294802796']
['Comoros', 'Comoros', 'COM', '902011', 'Africa', '8093', '160', '8972', '177', '1.977017175']
['Congo', 'Congo', 'COG', '5755689', 'Africa', '24071', '385', '4182', '67', '1.599435005']
['Cook Islands', 'Cook Islands', 'COK', '17592', 'Oceania', '2118', '0', '120396', '0', '0']
['Costa Rica', 'Costa Rica', 'CRI', '5175547', 'Latin America and the Caribbean', '839368', '8308', '162180', '1605', '0.98979232']
['Croatia', 'Croatia', 'HRV', '4060951', 'Europe', '1102730', '15601', '271545', '3842', '1.414761546']
['Cuba', 'Cuba', 'CUB', '11314513', 'Latin America and the Caribbean', '1092547', '8514', '96562', '752', '0.779279976']
['Curaçao', 'Curaçao', 'CUW', '165268', 'Latin America and the Caribbean', '40671', '267', '246091', '1616', '0.656487423']
['Cyprus', 'Cyprus', 'CYP', '1222745', 'Asia', '439964', '947', '359817', '774', '0.215244884']
['Czechia', 'Czech Republic', 'CZE', '10743762', 'Europe', '3830631', '39720', '356545', '3697', '1.036904886']
['Denmark', 'Denmark', 'DNK', '5827911', 'Europe', '2919428', '5762', '500939', '989', '0.19736743']
['Djibouti', 'Djibouti', 'DJI', '1013146', 'Africa', '15590', '189', '15388', '187', '1.212315587']
['Dominica', 'Dominica', 'DMA', '72299', 'Latin America and the Caribbean', '11891', '63', '164470', '871', '0.529812463']
['Dominican Republic', 'Dominican Republic', 'DOM', '11038333', 'Latin America and the Caribbean', '578130', '4375', '52375', '396', '0.756750212']
['Democratic Republic of the Congo', 'Democratic Republic of the Congo', 'COD', '94323344', 'Africa', '86748', '1337', '920', '14', '1.541245908']
['Ecuador', 'Ecuador', 'ECU', '18111933', 'Latin America and the Caribbean', '859890', '35421', '47476', '1956', '4.119247811']
['Egypt', 'Egypt', 'EGY', '105711844', 'Africa', '505264', '24417', '4780', '231', '4.832523196']
['El Salvador', 'El Salvador', 'SLV', '6543499', 'Latin America and the Caribbean', '161570', '4120', '24692', '630', '2.549978338']
['Equatorial Guinea', 'Equatorial Guinea', 'GNQ', '1483588', 'Africa', '15903', '183', '10719', '123', '1.150726278']
['Eritrea', 'Eritrea', 'ERI', '3632329', 'Africa', '9728', '103', '2678', '28', '1.058799342']
['Estonia', 'Estonia', 'EST', '1328097', 'Europe', '558706', '2468', '420682', '1858', '0.441735009']
['Eswatini', 'Eswatini', 'SWZ', '1181191', 'Africa', '69851', '1394', '59136', '1180', '1.995676511']
['Ethiopia', 'Ethiopia', 'ETH', '119945147', 'Africa', '469819', '7504', '3917', '63', '1.597210841']
['Faeroe Islands', 'Faeroe Islands', 'FRO', '49188', 'Europe', '34237', '28', '696044', '569', '0.081782866']
['Falkland Islands', 'Falkland Islands (Malvinas)', 'FLK', '3657', 'Latin America and the Caribbean', '123', '0', '33634', '0', '0']
['Fiji', 'Fiji', 'FJI', '907817', 'Oceania', '64422', '834', '70964', '919', '1.294588805']
['Finland', 'Finland', 'FIN', '5555788', 'Europe', '889626', '3178', '160126', '572', '0.357228768']
['France', 'France', 'FRA', '65526369', 'Europe', '25997852', '142506', '396754', '2175', '0.548145285']
['French Guiana', 'French Guiana', 'GUF', '312224', 'Latin America and the Caribbean', '79075', '394', '253264', '1262', '0.498261144']
['French Polynesia', 'French Polynesia', 'PYF', '283751', 'Oceania', '72318', '646', '254864', '2277', '0.893276916']
['Gabon', 'Gabon', 'GAB', '2317612', 'Africa', '47586', '303', '20532', '131', '0.636741899']
['Gambia', 'Gambia', 'GMB', '2535418', 'Africa', '11988', '365', '4728', '144', '3.044711378']
['Georgia', 'Georgia', 'GEO', '3975762', 'Asia', '1649222', '16756', '414819', '4215', '1.015994208']
['Germany', 'Germany', 'DEU', '84252947', 'Europe', '21646375', '130563', '256921', '1550', '0.603163347']
['Ghana', 'Ghana', 'GHA', '32207812', 'Africa', '160971', '1445', '4998', '45', '0.897677221']
['Gibraltar', 'Gibraltar', 'GIB', '33673', 'Europe', '16979', '101', '504232', '2999', '0.594852465']
['Greece', 'Greece', 'GRC', '10333930', 'Europe', '3077711', '27684', '297826', '2679', '0.899499661']
['Greenland', 'Greenland', 'GRL', '56942', 'Northern America', '11971', '21', '210231', '369', '0.175423941']
['Grenada', 'Grenada', 'GRD', '113436', 'Latin America and the Caribbean', '14024', '218', '123629', '1922', '1.554478038']
['Guadeloupe', 'Guadeloupe', 'GLP', '400244', 'Latin America and the Caribbean', '130705', '843', '326563', '2106', '0.64496385']
['Guatemala', 'Guatemala', 'GTM', '18495493', 'Latin America and the Caribbean', '830745', '17325', '44916', '937', '2.085477493']
['Guinea', 'Guinea', 'GIN', '13755881', 'Africa', '36459', '440', '2650', '32', '1.206835075']
['Guinea-Bissau', 'Guinea-Bissau', 'GNB', '2049374', 'Africa', '8151', '170', '3977', '83', '2.085633665']
['Guyana', 'Guyana', 'GUY', '793196', 'Latin America and the Caribbean', '63272', '1226', '79768', '1546', '1.93766595']
['Haiti', 'Haiti', 'HTI', '11645833', 'Latin America and the Caribbean', '30549', '833', '2623', '72', '2.726766834']
['Honduras', 'Honduras', 'HND', '10180299', 'Latin America and the Caribbean', '421062', '10880', '41360', '1069', '2.583942507']
['Hong Kong', 'China, Hong Kong Special Administrative Region', 'HKG', '7603455', 'Asia', '1171422', '8172', '154064', '1075', '0.69761367']
['Hungary', 'Hungary', 'HUN', '9617409', 'Europe', '1854198', '45510', '192796', '4732', '2.454430433']
['Iceland', 'Iceland', 'ISL', '345120', 'Europe', '181830', '101', '526860', '293', '0.055546389']
['India', 'India', 'IND', '1403754381', 'Asia', '43029044', '521388', '30653', '371', '1.211711792']
['Indonesia', 'Indonesia', 'IDN', '278586508', 'Asia', '6019981', '155288', '21609', '557', '2.579543025']
['Iran', 'United Kingdom', 'IRN', '85874667', 'Asia', '7167646', '140315', '83466', '1634', '1.95761621']
['Iraq', 'Iraq', 'IRQ', '41801625', 'Asia', '2320260', '25173', '55506', '602', '1.084921517']
['Ireland', 'Ireland', 'IRL', '5034333', 'Europe', '1471210', '6786', '292235', '1348', '0.461252982']
['Isle of Man', 'Isle of Man', 'IMN', '85821', 'Europe', '28416', '84', '331108', '979', '0.295608108']
['Israel', 'Israel', 'ISR', '9326000', 'Asia', '3943153', '10530', '422813', '1129', '0.267045179']
['Italy', 'Italy', 'ITA', '60306185', 'Europe', '14846514', '159784', '246186', '2650', '1.076239176']
['Ivory Coast', "Côte d'Ivoire", 'CIV', '27520953', 'Africa', '81761', '796', '2971', '29', '0.973569306']
['Jamaica', 'Jamaica', 'JAM', '2983794', 'Latin America and the Caribbean', '128811', '2893', '43170', '970', '2.245926202']
['Japan', 'Japan', 'JPN', '125798669', 'Asia', '6653841', '28248', '52893', '225', '0.424536745']
['Jordan', 'Jordan', 'JOR', '10380442', 'Asia', '1689314', '14003', '162740', '1349', '0.828916353']
['Kazakhstan', 'Kazakhstan', 'KAZ', '19169833', 'Asia', '1305188', '13660', '68086', '713', '1.046592522']
['Kenya', 'Kenya', 'KEN', '55843563', 'Africa', '323454', '5648', '5792', '101', '1.746152467']
['Kiribati', 'Kiribati', 'KIR', '122656', 'Oceania', '3067', '13', '25005', '106', '0.423866971']
['Kuwait', 'Kuwait', 'KWT', '4381108', 'Asia', '629525', '2554', '143691', '583', '0.405702712']
['Kyrgyzstan', 'Kyrgyzstan', 'KGZ', '6712569', 'Asia', '200968', '2991', '29939', '446', '1.488296644']
['Laos', "Lao People's Democratic Republic", 'LAO', '7460338', 'Asia', '183560', '679', '24605', '91', '0.369906298']
['Latvia', 'Latvia', 'LVA', '1849698', 'Europe', '802534', '5643', '433873', '3051', '0.703147779']
['Lebanon', 'Lebanon', 'LBN', '6771939', 'Asia', '1092995', '10315', '161401', '1523', '0.943737163']
['Lesotho', 'Lesotho', 'LSO', '2171978', 'Africa', '32910', '697', '15152', '321', '2.117897296']
['Liberia', 'Liberia', 'LBR', '5265647', 'Africa', '7400', '294', '1405', '56', '3.972972973']
['Libya', 'Libya', 'LBY', '7034832', 'Africa', '501738', '6419', '71322', '912', '1.279352969']
['Liechtenstein', 'Liechtenstein', 'LIE', '38320', 'Europe', '16429', '84', '428732', '2192', '0.51129101']
['Lithuania', 'Lithuania', 'LTU', '2655811', 'Europe', '1030966', '8907', '388193', '3354', '0.863947017']
['Luxembourg', 'Luxembourg', 'LUX', '643801', 'Europe', '216979', '1037', '337028', '1611', '0.477926435']
['Macao', 'China, Macao Special Administrative Region', 'MAC', '664828', 'Asia', '82', '0', '123', '0', '0']
['Madagascar', 'Madagascar', 'MDG', '28936285', 'Africa', '64050', '1388', '2213', '48', '2.167056987']
['Malawi', 'Malawi', 'MWI', '19994654', 'Africa', '85664', '2626', '4284', '131', '3.065465073']
['Malaysia', 'Malaysia', 'MYS', '33091831', 'Asia', '4246467', '35099', '128324', '1061', '0.826545926']
['Maldives', 'Maldives', 'MDV', '557204', 'Asia', '176993', '298', '317645', '535', '0.168368241']
['Mali', 'Mali', 'MLI', '21271006', 'Africa', '30495', '728', '1434', '34', '2.387276603']
['Malta', 'Malta', 'MLT', '443602', 'Europe', '81596', '641', '183940', '1445', '0.785577724']
['Marshall Islands', 'Marshall Islands', 'MHL', '59889', 'Oceania', '7', '0', '117', '0', '0']
['Martinique', 'Martinique', 'MTQ', '374756', 'Latin America and the Caribbean', '141415', '909', '377352', '2426', '0.642788954']
['Mauritania', 'Mauritania', 'MRT', '4863443', 'Africa', '58670', '982', '12063', '202', '1.673768536']
['Mauritius', 'Mauritius', 'MUS', '1275463', 'Africa', '36628', '968', '28717', '759', '2.642786939']
['Mayotte', 'Mayotte', 'MYTÂ\xa0', '284330', 'Africa', '36891', '187', '129747', '658', '0.506898702']
['Mexico', 'Mexico', 'MEX', '131303955', 'Latin America and the Caribbean', '5665376', '323212', '43147', '2462', '5.705040583']
['Micronesia', 'Micronesia (Federated States of)', 'FSM', '117134', 'Oceania', '1', '0', '9', '0', '0']
['Moldova', 'Republic of Moldova', 'MDA', '4017550', 'Europe', '514199', '11446', '127988', '2849', '2.225986437']
['Monaco', 'Monaco', 'MCO', '39729', 'Europe', '10842', '54', '272899', '1359', '0.498063088']
['Mongolia', 'Mongolia', 'MNG', '3370682', 'Asia', '468610', '2177', '139025', '646', '0.464565417']
['Montenegro', '', 'MNE', '628205', 'Europe', '233326', '2705', '371417', '4306', '1.15932215']
['Montserrat', 'Montserrat', 'MSR', '4997', 'Latin America and the Caribbean', '175', '2', '35021', '400', '1.142857143']
['Morocco', 'Morocco', 'MAR', '37676342', 'Africa', '1163526', '16060', '30882', '426', '1.380287162']
['Mozambique', 'Mozambique', 'MOZ', '32787052', 'Africa', '225266', '2200', '6871', '67', '0.976623192']
['Myanmar', 'Myanmar', 'MMR', '55048340', 'Asia', '611875', '19433', '11115', '353', '3.175975485']
['Namibia', 'Namibia', 'NAM', '2621429', 'Africa', '157646', '4019', '60137', '1533', '2.549382794']
['Nepal', 'Nepal', 'NPL', '30053867', 'Asia', '978475', '11951', '32557', '398', '1.221390429']
['Netherlands', 'Netherlands', 'NLD', '17201245', 'Europe', '7908701', '22016', '459775', '1280', '0.278376942']
['New Caledonia', 'New Caledonia', 'NCL', '290302', 'Oceania', '60294', '311', '207694', '1071', '0.515805884']
['New Zealand', 'New Zealand', 'NZL', '5002100', 'Oceania', '693219', '350', '138586', '70', '0.050489095']
['Nicaragua', 'Nicaragua', 'NIC', '6762511', 'Latin America and the Caribbean', '18434', '224', '2726', '33', '1.215145926']
['Niger', 'Niger', 'NER', '25738714', 'Africa', '8811', '308', '342', '12', '3.495630462']
['Nigeria', 'Nigeria', 'NGA', '215077352', 'Africa', '255468', '3142', '1188', '15', '1.229899635']
['Niue', 'Niue', 'NIU', '1645', 'Oceania', '7', '0', '4255', '0', '0']
['North Macedonia', 'The former Yugoslav Republic of Macedonia', 'MKD', '2083224', 'Europe', '306670', '9228', '147209', '4430', '3.009097727']
['Norway', 'Norway', 'NOR', '5495449', 'Europe', '1408708', '2518', '256341', '458', '0.178745347']
['Oman', 'Oman', 'OMN', '5333815', 'Asia', '388468', '4251', '72831', '797', '1.094298629']
['Pakistan', 'Pakistan', 'PAK', '228397520', 'Asia', '1525466', '30361', '6679', '133', '1.990277069']
['Palau', 'Palau', 'PLW', '18245', 'Oceania', '4042', '6', '221540', '329', '0.148441366']
['Palestine', 'State of Palestine', 'WBG', '5308883', 'Asia', '581236', '5351', '109484', '1008', '0.920624325']
['Panama', 'Panama', 'PAN', '4433639', 'Latin America and the Caribbean', '765213', '8170', '172593', '1843', '1.067676582']
['Papua New Guinea', 'Papua New Guinea', 'PNG', '9243590', 'Oceania', '42203', '640', '4566', '69', '1.516479871']
['Paraguay', 'Paraguay', 'PRY', '7285892', 'Latin America and the Caribbean', '648353', '18731', '88987', '2571', '2.889012621']
['Peru', 'Peru', 'PER', '33775745', 'Latin America and the Caribbean', '3548559', '212328', '105062', '6286', '5.983499218']
['Philippines', 'Philippines', 'PHL', '112133868', 'Asia', '3679485', '59343', '32813', '529', '1.612807227']
['Poland', 'Poland', 'POL', '37774045', 'Europe', '5969621', '115345', '158035', '3054', '1.932199716']
['Portugal', 'Portugal', 'PRT', '10144662', 'Europe', '3604114', '21693', '355272', '2138', '0.601895501']
['Qatar', 'Qatar', 'QAT', '2807805', 'Asia', '361819', '677', '128862', '241', '0.18711013']
['Réunion', 'Réunion', 'REU', '906497', 'Africa', '336945', '709', '371700', '782', '0.210420098']
['Romania', 'Romania', 'ROU', '19013049', 'Europe', '2860094', '65090', '150428', '3423', '2.275799327']
['Russia', 'Russian Federation', 'RUS', '146044010', 'Europe', '17896866', '369708', '122544', '2531', '2.065769504']
['Rwanda', 'Rwanda', 'RWA', '13513881', 'Africa', '129728', '1458', '9600', '108', '1.123889985']
['S. Korea', 'Republic of Korea', 'KOR', '51346429', 'Asia', '13874216', '17235', '270208', '336', '0.124223235']
['Saint Helena', 'Saint Helena', 'SHN', '6109', 'Africa', '2', '0', '327', '0', '0']
['Saint Kitts and Nevis', 'Saint Kitts and Nevis', 'KNA', '53858', 'Latin America and the Caribbean', '5549', '43', '103030', '798', '0.774914399']
['Saint Lucia', 'Saint Lucia', 'LCA', '185096', 'Latin America and the Caribbean', '22964', '365', '124065', '1972', '1.589444348']
['Saint Martin', 'Saint Martin', 'MAF', '39820', 'Latin America and the Caribbean', '10107', '63', '253817', '1582', '0.623330365']
['Saint Pierre Miquelon', '\xa0Saint Pierre and Miquelon', 'SPM', '5744', 'Northern America', '1957', '1', '340703', '174', '0.05109862']
['Samoa', 'Samoa', 'WSM', '200722', 'Oceania', '2285', '1', '11384', '5', '0.043763676']
['San Marino', 'San Marino', 'SMR', '34056', 'Europe', '15181', '113', '445766', '3318', '0.744351492']
['Sao Tome and Principe', 'Sao Tome and Principe', 'STP', '226281', 'Africa', '5945', '73', '26273', '323', '1.227922624']
['Saudi Arabia', 'Saudi Arabia', 'SAU', '35762746', 'Asia', '751076', '9048', '21002', '253', '1.204671698']
['Senegal', 'Senegal', 'SEN', '17515750', 'Africa', '85919', '1965', '4905', '112', '2.287037791']
['Serbia', 'Serbia', 'SRB', '8675762', 'Europe', '1980722', '15825', '228305', '1824', '0.79895109']
['Seychelles', 'Seychelles', 'SYC', '99413', 'Africa', '40421', '164', '406597', '1650', '0.405729695']
['Sierra Leone', 'Sierra Leone', 'SLE', '8260822', 'Africa', '7674', '125', '929', '15', '1.628876727']
['Singapore', 'Singapore', 'SGP', '5930887', 'Asia', '1109744', '1276', '187113', '215', '0.114981473']
['Sint Maarten', 'Sint Maarten', 'SXM', '43728', 'Latin America and the Caribbean', '9766', '86', '223335', '1967', '0.880606185']
['Slovakia', 'Slovakia', 'SVK', '5464272', 'Europe', '1725487', '19417', '315776', '3553', '1.125305493']
['Slovenia', 'Slovenia', 'SVN', '2079438', 'Europe', '973892', '6501', '468344', '3126', '0.667527816']
['Solomon Islands', 'Solomon Islands', 'SLB', '716351', 'Oceania', '11470', '133', '16012', '186', '1.159546643']
['Somalia', 'Somalia', 'SOM', '16668781', 'Africa', '26400', '1348', '1584', '81', '5.106060606']
['South Africa', 'South Africa', 'ZAF', '60617532', 'Africa', '3722954', '100050', '61417', '1651', '2.687382116']
['South Sudan', 'South Sudan', 'SSD', '11423439', 'Africa', '17278', '138', '1513', '12', '0.798703554']
['Spain', 'Spain', 'ESP', '46786482', 'Europe', '11551574', '102541', '246900', '2192', '0.887679895']
['Sri Lanka', 'Sri Lanka', 'LKA', '21570428', 'Asia', '661991', '16481', '30690', '764', '2.489610886']
['St. Barth ', 'Saint Barthélemy', 'BLM', '9930', 'Latin America and the Caribbean', '4150', '6', '417925', '604', '0.144578313']
['St. Vincent Grenadines', 'Saint Vincent and the Grenadines', 'VCT', '111557', 'Latin America and the Caribbean', '6746', '106', '60471', '950', '1.571301512']
['Sudan', 'Sudan', 'SDN', '45640385', 'Africa', '61955', '4907', '1357', '108', '7.920264708']
['Suriname', 'Suriname', 'SUR', '595833', 'Latin America and the Caribbean', '79232', '1325', '132977', '2224', '1.67230412']
['Sweden', 'Sweden', 'SWE', '10209507', 'Europe', '2487852', '18331', '243680', '1795', '0.736820357']
['Switzerland', 'Switzerland', 'CHE', '8765420', 'Europe', '3490876', '13715', '398255', '1565', '0.392881328']
['Syria', 'Syrian Arab Republic', 'SYR', '18244381', 'Asia', '55711', '3144', '3054', '172', '5.64340974']
['Taiwan', 'China, Taiwan Province of China', 'TWN', '23892241', 'Asia', '24310', '853', '1017', '36', '3.508844097']
['Tajikistan', 'Tajikistan', 'TJK', '9912437', 'Asia', '17388', '124', '1754', '13', '0.713135496']
['Tanzania', 'United Republic of Tanzania', 'TZA', '62710097', 'Africa', '33815', '800', '539', '13', '2.365813988']
['Thailand', 'Thailand', 'THA', '70106601', 'Asia', '3711595', '25418', '52942', '363', '0.684826874']
['Timor-Leste', 'Timor-Leste', 'TLS', '1362386', 'Asia', '22832', '130', '16759', '95', '0.569376314']
['Togo', 'Togo', 'TGO', '8618172', 'Africa', '36944', '272', '4287', '32', '0.736249459']
['Tonga', 'Tonga', 'TON', '107792', 'Oceania', '7127', '9', '66118', '83', '0.126280342']
['Trinidad and Tobago', 'Trinidad and Tobago', 'TTO', '1407422', 'Latin America and the Caribbean', '138425', '3756', '98354', '2669', '2.713382698']
['Tunisia', 'Tunisia', 'TUN', '12035092', 'Africa', '1035884', '28323', '86072', '2353', '2.734186453']
['Turkey', 'Turkey', 'TUR', '85927644', 'Asia', '14894731', '98157', '173340', '1142', '0.659004852']
['Turks and Caicos', 'Turks and Caicos Islands', 'TCAÂ\xa0', '39634', 'Latin America and the Caribbean', '5910', '36', '149114', '908', '0.609137056']
['UAE', 'United Arab Emirates', 'ARE', '10099567', 'Asia', '892170', '2302', '88337', '228', '0.258022574']
['Uganda', 'Uganda', 'UGA', '48267221', 'Africa', '163936', '3595', '3396', '74', '2.192928948']
['UK', 'United Kingdom of Great Britain and Northern Ireland', 'GBR', '68510300', 'Europe', '21216874', '165570', '309689', '2417', '0.780369436']
['Ukraine', 'Ukraine', 'UKR', '43273831', 'Europe', '4968881', '107980', '114824', '2495', '2.173125096']
['Uruguay', 'Uruguay', 'URY', '3494806', 'Latin America and the Caribbean', '889513', '7166', '254524', '2050', '0.805609362']
['USA', 'United States of America', 'USA', '334400597', 'Northern America', '81839052', '1008222', '244734', '3015', '1.231957086']
['Uzbekistan', 'Uzbekistan', 'UZB', '34318156', 'Asia', '237853', '1637', '6931', '48', '0.688240216']
['Vanuatu', 'Vanuatu', 'VUT', '319701', 'Oceania', '4107', '2', '12846', '6', '0.048697346']
['Vatican City', 'Holy See', 'VAT', '805', 'Europe', '29', '0', '36025', '0', '0']
['Venezuela', 'Venezuela (Bolivarian Republic of)', 'VEN', '28294895', 'Latin America and the Caribbean', '520843', '5686', '18408', '201', '1.091691738']
['Vietnam', 'Viet Nam', 'VNM', '98871712', 'Asia', '9818328', '42600', '99304', '431', '0.433882429']
['Wallis and Futuna', 'Wallis and Futuna Islands', 'WLF', '10894', 'Oceania', '454', '7', '41674', '643', '1.54185022']
['Western Sahara', 'Western Sahara', 'ESHÂ\xa0', '623031', 'Africa', '10', '1', '16', '2', '10']
['Yemen', 'Yemen', 'YEM', '30975258', 'Asia', '11806', '2143', '381', '69', '18.15178723']
['Zambia', 'Zambia', 'ZMB', '19284482', 'Africa', '317076', '3967', '16442', '206', '1.251119605']
['Zimbabwe', 'Zimbabwe', 'ZWE', '15241601', 'Africa', '246525', '5446', '16174', '357', '2.209106581']
with open(local_file1, 'r') as file:
reader = csv.reader(file)
line_count = 0
for row in reader:
if line_count == 0:
print(f'Ονόματα στηλών {", ".join(row)}')
print("\n\n")
line_count += 1
else:
print(row)
Ονόματα στηλών Country, Other names, ISO 3166-1 alpha-3 CODE, Population, Continent, Total Cases, Total Deaths, Tot Cases//1M pop, Tot Deaths/1M pop, Death percentage
['Afghanistan', 'Afghanistan', 'AFG', '40462186', 'Asia', '177827', '7671', '4395', '190', '4.313743132']
['Albania', 'Albania', 'ALB', '2872296', 'Europe', '273870', '3492', '95349', '1216', '1.275057509']
['Algeria', 'Algeria', 'DZA', '45236699', 'Africa', '265691', '6874', '5873', '152', '2.587215976']
['Andorra', 'Andorra', 'AND', '77481', 'Europe', '40024', '153', '516565', '1975', '0.382270638']
['Angola', 'Angola', 'AGO', '34654212', 'Africa', '99194', '1900', '2862', '55', '1.915438434']
['Anguilla', 'Anguilla', 'AIA', '15237', 'Latin America and the Caribbean', '2700', '9', '177200', '591', '0.333333333']
['Antigua and Barbuda', 'Antigua and Barbuda', 'ATG', '99348', 'Latin America and the Caribbean', '7493', '135', '75422', '1359', '1.801681569']
['Argentina', 'Argentina', 'ARG', '45921761', 'Latin America and the Caribbean', '9041124', '128065', '196881', '2789', '1.416472111']
['Armenia', 'Armenia', 'ARM', '2972939', 'Asia', '422574', '8617', '142140', '2898', '2.039169471']
['Aruba', 'Aruba', 'ABW', '107560', 'Latin America and the Caribbean', '34051', '212', '316577', '1971', '0.622595518']
['Australia', 'Australia', 'AUS', '26017767', 'Oceania', '4680816', '6384', '179908', '245', '0.136386476']
['Austria', 'Austria', 'AUT', '9096360', 'Europe', '3887355', '15985', '427353', '1757', '0.411205048']
['Azerbaijan', 'Azerbaijan', 'AZE', '10299156', 'Asia', '792061', '9697', '76905', '942', '1.224274393']
['Bahamas', 'Bahamas', 'BHM', '399822', 'Latin America and the Caribbean', '33295', '788', '83275', '1971', '2.36672173']
['Bahrain', 'Bahrain', 'BHR', '1804995', 'Asia', '556241', '1471', '308168', '815', '0.264453717']
['Bangladesh', 'Bangladesh', 'BGD', '167561502', 'Asia', '1951770', '29122', '11648', '174', '1.492081546']
['Barbados', 'Barbados', 'BRB', '287991', 'Latin America and the Caribbean', '59938', '375', '208125', '1302', '0.625646501']
['Belarus', 'Belarus', 'BLR', '9443882', 'Europe', '965322', '6844', '102217', '725', '0.708986224']
['Belgium', 'Belgium', 'BEL', '11677924', 'Europe', '3851048', '30826', '329772', '2640', '0.800457434']
['Belize', 'Belize', 'BLZ', '410260', 'Latin America and the Caribbean', '57289', '656', '139641', '1599', '1.14507148']
['Benin', 'Benin', 'BEN', '12678649', 'Africa', '26952', '163', '2126', '13', '0.604778866']
['Bermuda', 'Bermuda', 'BMU', '61875', 'Northern America', '12564', '128', '203055', '2069', '1.018783827']
['Bhutan', 'Bhutan', 'BTN', '786480', 'Asia', '31437', '12', '39972', '15', '0.038171581']
['Bolivia', 'Bolivia (Plurinational State of)', 'BOL', '11951714', 'Latin America and the Caribbean', '902448', '21896', '75508', '1832', '2.426289382']
['Bosnia and Herzegovina', 'Bosnia and Herzegovina', 'BIH', '3245097', 'Europe', '375693', '15719', '115773', '4844', '4.184001299']
['Botswana', 'Botswana', 'BWA', '2434708', 'Africa', '305526', '2686', '125488', '1103', '0.879139582']
['Brazil', 'Brazil', 'BRA', '215204501', 'Latin America and the Caribbean', '29999816', '660269', '139401', '3068', '2.200910166']
['British Virgin Islands', 'British Virgin Islands', 'VGB', '30583', 'Latin America and the Caribbean', '6155', '62', '201256', '2027', '1.007311129']
['Brunei ', 'Brunei Darussalam', 'BRN', '444812', 'Asia', '135974', '213', '305689', '479', '0.156647594']
['Bulgaria', 'Bulgaria', 'BGR', '6856886', 'Europe', '1140679', '36568', '166355', '5333', '3.205809873']
['Burkina Faso', 'Burkina Faso', 'BFA', '21905848', 'Africa', '20853', '382', '952', '17', '1.831870714']
['Burundi', 'Burundi', 'BDI', '12510155', 'Africa', '38519', '38', '3079', '3', '0.098652613']
['Cabo Verde', 'Cabo Verde', 'CPV', '566557', 'Africa', '55960', '401', '98772', '708', '0.716583274']
['Cambodia', 'Cambodia', 'KHM', '17123941', 'Asia', '135747', '3054', '7927', '178', '2.249773476']
['Cameroon', 'Cameroon', 'CMR', '27701805', 'Africa', '119544', '1927', '4315', '70', '1.611958777']
['Canada', 'Canada', 'CAN', '38321435', 'Northern America', '3499226', '37690', '91312', '984', '1.077095335']
['CAR', 'Central African Republic', 'CAF', '4976719', 'Africa', '14649', '113', '2944', '23', '0.771383712']
['Caribbean Netherlands', 'Bonaire, Sint Eustatius and Saba', 'BES', '26650', 'Latin America and the Caribbean', '8574', '33', '321726', '1238', '0.384884535']
['Cayman Islands', 'Cayman Islands', 'CYM', '67073', 'Latin America and the Caribbean', '20606', '24', '307218', '358', '0.116470931']
['Chad', 'Chad', 'TCD', '17250246', 'Africa', '7308', '191', '424', '11', '2.613574165']
['Channel Islands', 'Guernsey', 'GGY', '176668', 'Europe', '69036', '156', '390767', '883', '0.22596906']
['Chile', 'Chile', 'CHL', '19403451', 'Latin America and the Caribbean', '3486653', '56750', '179692', '2925', '1.627635443']
['China', 'China', 'CHN', '1439323776', 'Asia', '154738', '4638', '108', '3', '2.99732451']
['Colombia', 'Colombia', 'COL', '51832231', 'Latin America and the Caribbean', '6085926', '139660', '117416', '2694', '2.294802796']
['Comoros', 'Comoros', 'COM', '902011', 'Africa', '8093', '160', '8972', '177', '1.977017175']
['Congo', 'Congo', 'COG', '5755689', 'Africa', '24071', '385', '4182', '67', '1.599435005']
['Cook Islands', 'Cook Islands', 'COK', '17592', 'Oceania', '2118', '0', '120396', '0', '0']
['Costa Rica', 'Costa Rica', 'CRI', '5175547', 'Latin America and the Caribbean', '839368', '8308', '162180', '1605', '0.98979232']
['Croatia', 'Croatia', 'HRV', '4060951', 'Europe', '1102730', '15601', '271545', '3842', '1.414761546']
['Cuba', 'Cuba', 'CUB', '11314513', 'Latin America and the Caribbean', '1092547', '8514', '96562', '752', '0.779279976']
['Curaçao', 'Curaçao', 'CUW', '165268', 'Latin America and the Caribbean', '40671', '267', '246091', '1616', '0.656487423']
['Cyprus', 'Cyprus', 'CYP', '1222745', 'Asia', '439964', '947', '359817', '774', '0.215244884']
['Czechia', 'Czech Republic', 'CZE', '10743762', 'Europe', '3830631', '39720', '356545', '3697', '1.036904886']
['Denmark', 'Denmark', 'DNK', '5827911', 'Europe', '2919428', '5762', '500939', '989', '0.19736743']
['Djibouti', 'Djibouti', 'DJI', '1013146', 'Africa', '15590', '189', '15388', '187', '1.212315587']
['Dominica', 'Dominica', 'DMA', '72299', 'Latin America and the Caribbean', '11891', '63', '164470', '871', '0.529812463']
['Dominican Republic', 'Dominican Republic', 'DOM', '11038333', 'Latin America and the Caribbean', '578130', '4375', '52375', '396', '0.756750212']
['Democratic Republic of the Congo', 'Democratic Republic of the Congo', 'COD', '94323344', 'Africa', '86748', '1337', '920', '14', '1.541245908']
['Ecuador', 'Ecuador', 'ECU', '18111933', 'Latin America and the Caribbean', '859890', '35421', '47476', '1956', '4.119247811']
['Egypt', 'Egypt', 'EGY', '105711844', 'Africa', '505264', '24417', '4780', '231', '4.832523196']
['El Salvador', 'El Salvador', 'SLV', '6543499', 'Latin America and the Caribbean', '161570', '4120', '24692', '630', '2.549978338']
['Equatorial Guinea', 'Equatorial Guinea', 'GNQ', '1483588', 'Africa', '15903', '183', '10719', '123', '1.150726278']
['Eritrea', 'Eritrea', 'ERI', '3632329', 'Africa', '9728', '103', '2678', '28', '1.058799342']
['Estonia', 'Estonia', 'EST', '1328097', 'Europe', '558706', '2468', '420682', '1858', '0.441735009']
['Eswatini', 'Eswatini', 'SWZ', '1181191', 'Africa', '69851', '1394', '59136', '1180', '1.995676511']
['Ethiopia', 'Ethiopia', 'ETH', '119945147', 'Africa', '469819', '7504', '3917', '63', '1.597210841']
['Faeroe Islands', 'Faeroe Islands', 'FRO', '49188', 'Europe', '34237', '28', '696044', '569', '0.081782866']
['Falkland Islands', 'Falkland Islands (Malvinas)', 'FLK', '3657', 'Latin America and the Caribbean', '123', '0', '33634', '0', '0']
['Fiji', 'Fiji', 'FJI', '907817', 'Oceania', '64422', '834', '70964', '919', '1.294588805']
['Finland', 'Finland', 'FIN', '5555788', 'Europe', '889626', '3178', '160126', '572', '0.357228768']
['France', 'France', 'FRA', '65526369', 'Europe', '25997852', '142506', '396754', '2175', '0.548145285']
['French Guiana', 'French Guiana', 'GUF', '312224', 'Latin America and the Caribbean', '79075', '394', '253264', '1262', '0.498261144']
['French Polynesia', 'French Polynesia', 'PYF', '283751', 'Oceania', '72318', '646', '254864', '2277', '0.893276916']
['Gabon', 'Gabon', 'GAB', '2317612', 'Africa', '47586', '303', '20532', '131', '0.636741899']
['Gambia', 'Gambia', 'GMB', '2535418', 'Africa', '11988', '365', '4728', '144', '3.044711378']
['Georgia', 'Georgia', 'GEO', '3975762', 'Asia', '1649222', '16756', '414819', '4215', '1.015994208']
['Germany', 'Germany', 'DEU', '84252947', 'Europe', '21646375', '130563', '256921', '1550', '0.603163347']
['Ghana', 'Ghana', 'GHA', '32207812', 'Africa', '160971', '1445', '4998', '45', '0.897677221']
['Gibraltar', 'Gibraltar', 'GIB', '33673', 'Europe', '16979', '101', '504232', '2999', '0.594852465']
['Greece', 'Greece', 'GRC', '10333930', 'Europe', '3077711', '27684', '297826', '2679', '0.899499661']
['Greenland', 'Greenland', 'GRL', '56942', 'Northern America', '11971', '21', '210231', '369', '0.175423941']
['Grenada', 'Grenada', 'GRD', '113436', 'Latin America and the Caribbean', '14024', '218', '123629', '1922', '1.554478038']
['Guadeloupe', 'Guadeloupe', 'GLP', '400244', 'Latin America and the Caribbean', '130705', '843', '326563', '2106', '0.64496385']
['Guatemala', 'Guatemala', 'GTM', '18495493', 'Latin America and the Caribbean', '830745', '17325', '44916', '937', '2.085477493']
['Guinea', 'Guinea', 'GIN', '13755881', 'Africa', '36459', '440', '2650', '32', '1.206835075']
['Guinea-Bissau', 'Guinea-Bissau', 'GNB', '2049374', 'Africa', '8151', '170', '3977', '83', '2.085633665']
['Guyana', 'Guyana', 'GUY', '793196', 'Latin America and the Caribbean', '63272', '1226', '79768', '1546', '1.93766595']
['Haiti', 'Haiti', 'HTI', '11645833', 'Latin America and the Caribbean', '30549', '833', '2623', '72', '2.726766834']
['Honduras', 'Honduras', 'HND', '10180299', 'Latin America and the Caribbean', '421062', '10880', '41360', '1069', '2.583942507']
['Hong Kong', 'China, Hong Kong Special Administrative Region', 'HKG', '7603455', 'Asia', '1171422', '8172', '154064', '1075', '0.69761367']
['Hungary', 'Hungary', 'HUN', '9617409', 'Europe', '1854198', '45510', '192796', '4732', '2.454430433']
['Iceland', 'Iceland', 'ISL', '345120', 'Europe', '181830', '101', '526860', '293', '0.055546389']
['India', 'India', 'IND', '1403754381', 'Asia', '43029044', '521388', '30653', '371', '1.211711792']
['Indonesia', 'Indonesia', 'IDN', '278586508', 'Asia', '6019981', '155288', '21609', '557', '2.579543025']
['Iran', 'United Kingdom', 'IRN', '85874667', 'Asia', '7167646', '140315', '83466', '1634', '1.95761621']
['Iraq', 'Iraq', 'IRQ', '41801625', 'Asia', '2320260', '25173', '55506', '602', '1.084921517']
['Ireland', 'Ireland', 'IRL', '5034333', 'Europe', '1471210', '6786', '292235', '1348', '0.461252982']
['Isle of Man', 'Isle of Man', 'IMN', '85821', 'Europe', '28416', '84', '331108', '979', '0.295608108']
['Israel', 'Israel', 'ISR', '9326000', 'Asia', '3943153', '10530', '422813', '1129', '0.267045179']
['Italy', 'Italy', 'ITA', '60306185', 'Europe', '14846514', '159784', '246186', '2650', '1.076239176']
['Ivory Coast', "Côte d'Ivoire", 'CIV', '27520953', 'Africa', '81761', '796', '2971', '29', '0.973569306']
['Jamaica', 'Jamaica', 'JAM', '2983794', 'Latin America and the Caribbean', '128811', '2893', '43170', '970', '2.245926202']
['Japan', 'Japan', 'JPN', '125798669', 'Asia', '6653841', '28248', '52893', '225', '0.424536745']
['Jordan', 'Jordan', 'JOR', '10380442', 'Asia', '1689314', '14003', '162740', '1349', '0.828916353']
['Kazakhstan', 'Kazakhstan', 'KAZ', '19169833', 'Asia', '1305188', '13660', '68086', '713', '1.046592522']
['Kenya', 'Kenya', 'KEN', '55843563', 'Africa', '323454', '5648', '5792', '101', '1.746152467']
['Kiribati', 'Kiribati', 'KIR', '122656', 'Oceania', '3067', '13', '25005', '106', '0.423866971']
['Kuwait', 'Kuwait', 'KWT', '4381108', 'Asia', '629525', '2554', '143691', '583', '0.405702712']
['Kyrgyzstan', 'Kyrgyzstan', 'KGZ', '6712569', 'Asia', '200968', '2991', '29939', '446', '1.488296644']
['Laos', "Lao People's Democratic Republic", 'LAO', '7460338', 'Asia', '183560', '679', '24605', '91', '0.369906298']
['Latvia', 'Latvia', 'LVA', '1849698', 'Europe', '802534', '5643', '433873', '3051', '0.703147779']
['Lebanon', 'Lebanon', 'LBN', '6771939', 'Asia', '1092995', '10315', '161401', '1523', '0.943737163']
['Lesotho', 'Lesotho', 'LSO', '2171978', 'Africa', '32910', '697', '15152', '321', '2.117897296']
['Liberia', 'Liberia', 'LBR', '5265647', 'Africa', '7400', '294', '1405', '56', '3.972972973']
['Libya', 'Libya', 'LBY', '7034832', 'Africa', '501738', '6419', '71322', '912', '1.279352969']
['Liechtenstein', 'Liechtenstein', 'LIE', '38320', 'Europe', '16429', '84', '428732', '2192', '0.51129101']
['Lithuania', 'Lithuania', 'LTU', '2655811', 'Europe', '1030966', '8907', '388193', '3354', '0.863947017']
['Luxembourg', 'Luxembourg', 'LUX', '643801', 'Europe', '216979', '1037', '337028', '1611', '0.477926435']
['Macao', 'China, Macao Special Administrative Region', 'MAC', '664828', 'Asia', '82', '0', '123', '0', '0']
['Madagascar', 'Madagascar', 'MDG', '28936285', 'Africa', '64050', '1388', '2213', '48', '2.167056987']
['Malawi', 'Malawi', 'MWI', '19994654', 'Africa', '85664', '2626', '4284', '131', '3.065465073']
['Malaysia', 'Malaysia', 'MYS', '33091831', 'Asia', '4246467', '35099', '128324', '1061', '0.826545926']
['Maldives', 'Maldives', 'MDV', '557204', 'Asia', '176993', '298', '317645', '535', '0.168368241']
['Mali', 'Mali', 'MLI', '21271006', 'Africa', '30495', '728', '1434', '34', '2.387276603']
['Malta', 'Malta', 'MLT', '443602', 'Europe', '81596', '641', '183940', '1445', '0.785577724']
['Marshall Islands', 'Marshall Islands', 'MHL', '59889', 'Oceania', '7', '0', '117', '0', '0']
['Martinique', 'Martinique', 'MTQ', '374756', 'Latin America and the Caribbean', '141415', '909', '377352', '2426', '0.642788954']
['Mauritania', 'Mauritania', 'MRT', '4863443', 'Africa', '58670', '982', '12063', '202', '1.673768536']
['Mauritius', 'Mauritius', 'MUS', '1275463', 'Africa', '36628', '968', '28717', '759', '2.642786939']
['Mayotte', 'Mayotte', 'MYTÂ\xa0', '284330', 'Africa', '36891', '187', '129747', '658', '0.506898702']
['Mexico', 'Mexico', 'MEX', '131303955', 'Latin America and the Caribbean', '5665376', '323212', '43147', '2462', '5.705040583']
['Micronesia', 'Micronesia (Federated States of)', 'FSM', '117134', 'Oceania', '1', '0', '9', '0', '0']
['Moldova', 'Republic of Moldova', 'MDA', '4017550', 'Europe', '514199', '11446', '127988', '2849', '2.225986437']
['Monaco', 'Monaco', 'MCO', '39729', 'Europe', '10842', '54', '272899', '1359', '0.498063088']
['Mongolia', 'Mongolia', 'MNG', '3370682', 'Asia', '468610', '2177', '139025', '646', '0.464565417']
['Montenegro', '', 'MNE', '628205', 'Europe', '233326', '2705', '371417', '4306', '1.15932215']
['Montserrat', 'Montserrat', 'MSR', '4997', 'Latin America and the Caribbean', '175', '2', '35021', '400', '1.142857143']
['Morocco', 'Morocco', 'MAR', '37676342', 'Africa', '1163526', '16060', '30882', '426', '1.380287162']
['Mozambique', 'Mozambique', 'MOZ', '32787052', 'Africa', '225266', '2200', '6871', '67', '0.976623192']
['Myanmar', 'Myanmar', 'MMR', '55048340', 'Asia', '611875', '19433', '11115', '353', '3.175975485']
['Namibia', 'Namibia', 'NAM', '2621429', 'Africa', '157646', '4019', '60137', '1533', '2.549382794']
['Nepal', 'Nepal', 'NPL', '30053867', 'Asia', '978475', '11951', '32557', '398', '1.221390429']
['Netherlands', 'Netherlands', 'NLD', '17201245', 'Europe', '7908701', '22016', '459775', '1280', '0.278376942']
['New Caledonia', 'New Caledonia', 'NCL', '290302', 'Oceania', '60294', '311', '207694', '1071', '0.515805884']
['New Zealand', 'New Zealand', 'NZL', '5002100', 'Oceania', '693219', '350', '138586', '70', '0.050489095']
['Nicaragua', 'Nicaragua', 'NIC', '6762511', 'Latin America and the Caribbean', '18434', '224', '2726', '33', '1.215145926']
['Niger', 'Niger', 'NER', '25738714', 'Africa', '8811', '308', '342', '12', '3.495630462']
['Nigeria', 'Nigeria', 'NGA', '215077352', 'Africa', '255468', '3142', '1188', '15', '1.229899635']
['Niue', 'Niue', 'NIU', '1645', 'Oceania', '7', '0', '4255', '0', '0']
['North Macedonia', 'The former Yugoslav Republic of Macedonia', 'MKD', '2083224', 'Europe', '306670', '9228', '147209', '4430', '3.009097727']
['Norway', 'Norway', 'NOR', '5495449', 'Europe', '1408708', '2518', '256341', '458', '0.178745347']
['Oman', 'Oman', 'OMN', '5333815', 'Asia', '388468', '4251', '72831', '797', '1.094298629']
['Pakistan', 'Pakistan', 'PAK', '228397520', 'Asia', '1525466', '30361', '6679', '133', '1.990277069']
['Palau', 'Palau', 'PLW', '18245', 'Oceania', '4042', '6', '221540', '329', '0.148441366']
['Palestine', 'State of Palestine', 'WBG', '5308883', 'Asia', '581236', '5351', '109484', '1008', '0.920624325']
['Panama', 'Panama', 'PAN', '4433639', 'Latin America and the Caribbean', '765213', '8170', '172593', '1843', '1.067676582']
['Papua New Guinea', 'Papua New Guinea', 'PNG', '9243590', 'Oceania', '42203', '640', '4566', '69', '1.516479871']
['Paraguay', 'Paraguay', 'PRY', '7285892', 'Latin America and the Caribbean', '648353', '18731', '88987', '2571', '2.889012621']
['Peru', 'Peru', 'PER', '33775745', 'Latin America and the Caribbean', '3548559', '212328', '105062', '6286', '5.983499218']
['Philippines', 'Philippines', 'PHL', '112133868', 'Asia', '3679485', '59343', '32813', '529', '1.612807227']
['Poland', 'Poland', 'POL', '37774045', 'Europe', '5969621', '115345', '158035', '3054', '1.932199716']
['Portugal', 'Portugal', 'PRT', '10144662', 'Europe', '3604114', '21693', '355272', '2138', '0.601895501']
['Qatar', 'Qatar', 'QAT', '2807805', 'Asia', '361819', '677', '128862', '241', '0.18711013']
['Réunion', 'Réunion', 'REU', '906497', 'Africa', '336945', '709', '371700', '782', '0.210420098']
['Romania', 'Romania', 'ROU', '19013049', 'Europe', '2860094', '65090', '150428', '3423', '2.275799327']
['Russia', 'Russian Federation', 'RUS', '146044010', 'Europe', '17896866', '369708', '122544', '2531', '2.065769504']
['Rwanda', 'Rwanda', 'RWA', '13513881', 'Africa', '129728', '1458', '9600', '108', '1.123889985']
['S. Korea', 'Republic of Korea', 'KOR', '51346429', 'Asia', '13874216', '17235', '270208', '336', '0.124223235']
['Saint Helena', 'Saint Helena', 'SHN', '6109', 'Africa', '2', '0', '327', '0', '0']
['Saint Kitts and Nevis', 'Saint Kitts and Nevis', 'KNA', '53858', 'Latin America and the Caribbean', '5549', '43', '103030', '798', '0.774914399']
['Saint Lucia', 'Saint Lucia', 'LCA', '185096', 'Latin America and the Caribbean', '22964', '365', '124065', '1972', '1.589444348']
['Saint Martin', 'Saint Martin', 'MAF', '39820', 'Latin America and the Caribbean', '10107', '63', '253817', '1582', '0.623330365']
['Saint Pierre Miquelon', '\xa0Saint Pierre and Miquelon', 'SPM', '5744', 'Northern America', '1957', '1', '340703', '174', '0.05109862']
['Samoa', 'Samoa', 'WSM', '200722', 'Oceania', '2285', '1', '11384', '5', '0.043763676']
['San Marino', 'San Marino', 'SMR', '34056', 'Europe', '15181', '113', '445766', '3318', '0.744351492']
['Sao Tome and Principe', 'Sao Tome and Principe', 'STP', '226281', 'Africa', '5945', '73', '26273', '323', '1.227922624']
['Saudi Arabia', 'Saudi Arabia', 'SAU', '35762746', 'Asia', '751076', '9048', '21002', '253', '1.204671698']
['Senegal', 'Senegal', 'SEN', '17515750', 'Africa', '85919', '1965', '4905', '112', '2.287037791']
['Serbia', 'Serbia', 'SRB', '8675762', 'Europe', '1980722', '15825', '228305', '1824', '0.79895109']
['Seychelles', 'Seychelles', 'SYC', '99413', 'Africa', '40421', '164', '406597', '1650', '0.405729695']
['Sierra Leone', 'Sierra Leone', 'SLE', '8260822', 'Africa', '7674', '125', '929', '15', '1.628876727']
['Singapore', 'Singapore', 'SGP', '5930887', 'Asia', '1109744', '1276', '187113', '215', '0.114981473']
['Sint Maarten', 'Sint Maarten', 'SXM', '43728', 'Latin America and the Caribbean', '9766', '86', '223335', '1967', '0.880606185']
['Slovakia', 'Slovakia', 'SVK', '5464272', 'Europe', '1725487', '19417', '315776', '3553', '1.125305493']
['Slovenia', 'Slovenia', 'SVN', '2079438', 'Europe', '973892', '6501', '468344', '3126', '0.667527816']
['Solomon Islands', 'Solomon Islands', 'SLB', '716351', 'Oceania', '11470', '133', '16012', '186', '1.159546643']
['Somalia', 'Somalia', 'SOM', '16668781', 'Africa', '26400', '1348', '1584', '81', '5.106060606']
['South Africa', 'South Africa', 'ZAF', '60617532', 'Africa', '3722954', '100050', '61417', '1651', '2.687382116']
['South Sudan', 'South Sudan', 'SSD', '11423439', 'Africa', '17278', '138', '1513', '12', '0.798703554']
['Spain', 'Spain', 'ESP', '46786482', 'Europe', '11551574', '102541', '246900', '2192', '0.887679895']
['Sri Lanka', 'Sri Lanka', 'LKA', '21570428', 'Asia', '661991', '16481', '30690', '764', '2.489610886']
['St. Barth ', 'Saint Barthélemy', 'BLM', '9930', 'Latin America and the Caribbean', '4150', '6', '417925', '604', '0.144578313']
['St. Vincent Grenadines', 'Saint Vincent and the Grenadines', 'VCT', '111557', 'Latin America and the Caribbean', '6746', '106', '60471', '950', '1.571301512']
['Sudan', 'Sudan', 'SDN', '45640385', 'Africa', '61955', '4907', '1357', '108', '7.920264708']
['Suriname', 'Suriname', 'SUR', '595833', 'Latin America and the Caribbean', '79232', '1325', '132977', '2224', '1.67230412']
['Sweden', 'Sweden', 'SWE', '10209507', 'Europe', '2487852', '18331', '243680', '1795', '0.736820357']
['Switzerland', 'Switzerland', 'CHE', '8765420', 'Europe', '3490876', '13715', '398255', '1565', '0.392881328']
['Syria', 'Syrian Arab Republic', 'SYR', '18244381', 'Asia', '55711', '3144', '3054', '172', '5.64340974']
['Taiwan', 'China, Taiwan Province of China', 'TWN', '23892241', 'Asia', '24310', '853', '1017', '36', '3.508844097']
['Tajikistan', 'Tajikistan', 'TJK', '9912437', 'Asia', '17388', '124', '1754', '13', '0.713135496']
['Tanzania', 'United Republic of Tanzania', 'TZA', '62710097', 'Africa', '33815', '800', '539', '13', '2.365813988']
['Thailand', 'Thailand', 'THA', '70106601', 'Asia', '3711595', '25418', '52942', '363', '0.684826874']
['Timor-Leste', 'Timor-Leste', 'TLS', '1362386', 'Asia', '22832', '130', '16759', '95', '0.569376314']
['Togo', 'Togo', 'TGO', '8618172', 'Africa', '36944', '272', '4287', '32', '0.736249459']
['Tonga', 'Tonga', 'TON', '107792', 'Oceania', '7127', '9', '66118', '83', '0.126280342']
['Trinidad and Tobago', 'Trinidad and Tobago', 'TTO', '1407422', 'Latin America and the Caribbean', '138425', '3756', '98354', '2669', '2.713382698']
['Tunisia', 'Tunisia', 'TUN', '12035092', 'Africa', '1035884', '28323', '86072', '2353', '2.734186453']
['Turkey', 'Turkey', 'TUR', '85927644', 'Asia', '14894731', '98157', '173340', '1142', '0.659004852']
['Turks and Caicos', 'Turks and Caicos Islands', 'TCAÂ\xa0', '39634', 'Latin America and the Caribbean', '5910', '36', '149114', '908', '0.609137056']
['UAE', 'United Arab Emirates', 'ARE', '10099567', 'Asia', '892170', '2302', '88337', '228', '0.258022574']
['Uganda', 'Uganda', 'UGA', '48267221', 'Africa', '163936', '3595', '3396', '74', '2.192928948']
['UK', 'United Kingdom of Great Britain and Northern Ireland', 'GBR', '68510300', 'Europe', '21216874', '165570', '309689', '2417', '0.780369436']
['Ukraine', 'Ukraine', 'UKR', '43273831', 'Europe', '4968881', '107980', '114824', '2495', '2.173125096']
['Uruguay', 'Uruguay', 'URY', '3494806', 'Latin America and the Caribbean', '889513', '7166', '254524', '2050', '0.805609362']
['USA', 'United States of America', 'USA', '334400597', 'Northern America', '81839052', '1008222', '244734', '3015', '1.231957086']
['Uzbekistan', 'Uzbekistan', 'UZB', '34318156', 'Asia', '237853', '1637', '6931', '48', '0.688240216']
['Vanuatu', 'Vanuatu', 'VUT', '319701', 'Oceania', '4107', '2', '12846', '6', '0.048697346']
['Vatican City', 'Holy See', 'VAT', '805', 'Europe', '29', '0', '36025', '0', '0']
['Venezuela', 'Venezuela (Bolivarian Republic of)', 'VEN', '28294895', 'Latin America and the Caribbean', '520843', '5686', '18408', '201', '1.091691738']
['Vietnam', 'Viet Nam', 'VNM', '98871712', 'Asia', '9818328', '42600', '99304', '431', '0.433882429']
['Wallis and Futuna', 'Wallis and Futuna Islands', 'WLF', '10894', 'Oceania', '454', '7', '41674', '643', '1.54185022']
['Western Sahara', 'Western Sahara', 'ESHÂ\xa0', '623031', 'Africa', '10', '1', '16', '2', '10']
['Yemen', 'Yemen', 'YEM', '30975258', 'Asia', '11806', '2143', '381', '69', '18.15178723']
['Zambia', 'Zambia', 'ZMB', '19284482', 'Africa', '317076', '3967', '16442', '206', '1.251119605']
['Zimbabwe', 'Zimbabwe', 'ZWE', '15241601', 'Africa', '246525', '5446', '16174', '357', '2.209106581']
To κόμμα (,) χρησιμοποιείται ως προκαθορισμένη επιλογή σαν διαχωριστικό στηλών. Μπορούμε ρητά να δηλώσουμε ποιο θα είναι το διαχωριστικό με την επιλογή delimiter.
with open(local_file2, 'r') as file:
reader = csv.reader(file, delimiter = ';',quoting=csv.QUOTE_ALL)
for row in reader:
print(row)
['Country', 'Other names', 'ISO 3166-1 alpha-3 CODE', 'Population', 'Continent', 'Total Cases', 'Total Deaths', 'Tot\xa0Cases//1M pop', 'Tot\xa0Deaths/1M pop', 'Death percentage']
['Afghanistan', 'Afghanistan', 'AFG', '40462186', 'Asia', '177827', '7671', '4395', '190', '4.313743132']
['Albania', 'Albania', 'ALB', '2872296', 'Europe', '273870', '3492', '95349', '1216', '1.275057509']
['Algeria', 'Algeria', 'DZA', '45236699', 'Africa', '265691', '6874', '5873', '152', '2.587215976']
['Andorra', 'Andorra', 'AND', '77481', 'Europe', '40024', '153', '516565', '1975', '0.382270638']
['Angola', 'Angola', 'AGO', '34654212', 'Africa', '99194', '1900', '2862', '55', '1.915438434']
['Anguilla', 'Anguilla', 'AIA', '15237', 'Latin America and the Caribbean', '2700', '9', '177200', '591', '0.333333333']
['Antigua and Barbuda', 'Antigua and Barbuda', 'ATG', '99348', 'Latin America and the Caribbean', '7493', '135', '75422', '1359', '1.801681569']
['Argentina', 'Argentina', 'ARG', '45921761', 'Latin America and the Caribbean', '9041124', '128065', '196881', '2789', '1.416472111']
['Armenia', 'Armenia', 'ARM', '2972939', 'Asia', '422574', '8617', '142140', '2898', '2.039169471']
['Aruba', 'Aruba', 'ABW', '107560', 'Latin America and the Caribbean', '34051', '212', '316577', '1971', '0.622595518']
['Australia', 'Australia', 'AUS', '26017767', 'Oceania', '4680816', '6384', '179908', '245', '0.136386476']
['Austria', 'Austria', 'AUT', '9096360', 'Europe', '3887355', '15985', '427353', '1757', '0.411205048']
['Azerbaijan', 'Azerbaijan', 'AZE', '10299156', 'Asia', '792061', '9697', '76905', '942', '1.224274393']
['Bahamas', 'Bahamas', 'BHM', '399822', 'Latin America and the Caribbean', '33295', '788', '83275', '1971', '2.36672173']
['Bahrain', 'Bahrain', 'BHR', '1804995', 'Asia', '556241', '1471', '308168', '815', '0.264453717']
['Bangladesh', 'Bangladesh', 'BGD', '167561502', 'Asia', '1951770', '29122', '11648', '174', '1.492081546']
['Barbados', 'Barbados', 'BRB', '287991', 'Latin America and the Caribbean', '59938', '375', '208125', '1302', '0.625646501']
['Belarus', 'Belarus', 'BLR', '9443882', 'Europe', '965322', '6844', '102217', '725', '0.708986224']
['Belgium', 'Belgium', 'BEL', '11677924', 'Europe', '3851048', '30826', '329772', '2640', '0.800457434']
['Belize', 'Belize', 'BLZ', '410260', 'Latin America and the Caribbean', '57289', '656', '139641', '1599', '1.14507148']
['Benin', 'Benin', 'BEN', '12678649', 'Africa', '26952', '163', '2126', '13', '0.604778866']
['Bermuda', 'Bermuda', 'BMU', '61875', 'Northern America', '12564', '128', '203055', '2069', '1.018783827']
['Bhutan', 'Bhutan', 'BTN', '786480', 'Asia', '31437', '12', '39972', '15', '0.038171581']
['Bolivia', 'Bolivia (Plurinational State of)', 'BOL', '11951714', 'Latin America and the Caribbean', '902448', '21896', '75508', '1832', '2.426289382']
['Bosnia and Herzegovina', 'Bosnia and Herzegovina', 'BIH', '3245097', 'Europe', '375693', '15719', '115773', '4844', '4.184001299']
['Botswana', 'Botswana', 'BWA', '2434708', 'Africa', '305526', '2686', '125488', '1103', '0.879139582']
['Brazil', 'Brazil', 'BRA', '215204501', 'Latin America and the Caribbean', '29999816', '660269', '139401', '3068', '2.200910166']
['British Virgin Islands', 'British Virgin Islands', 'VGB', '30583', 'Latin America and the Caribbean', '6155', '62', '201256', '2027', '1.007311129']
['Brunei ', 'Brunei Darussalam', 'BRN', '444812', 'Asia', '135974', '213', '305689', '479', '0.156647594']
['Bulgaria', 'Bulgaria', 'BGR', '6856886', 'Europe', '1140679', '36568', '166355', '5333', '3.205809873']
['Burkina Faso', 'Burkina Faso', 'BFA', '21905848', 'Africa', '20853', '382', '952', '17', '1.831870714']
['Burundi', 'Burundi', 'BDI', '12510155', 'Africa', '38519', '38', '3079', '3', '0.098652613']
['Cabo Verde', 'Cabo Verde', 'CPV', '566557', 'Africa', '55960', '401', '98772', '708', '0.716583274']
['Cambodia', 'Cambodia', 'KHM', '17123941', 'Asia', '135747', '3054', '7927', '178', '2.249773476']
['Cameroon', 'Cameroon', 'CMR', '27701805', 'Africa', '119544', '1927', '4315', '70', '1.611958777']
['Canada', 'Canada', 'CAN', '38321435', 'Northern America', '3499226', '37690', '91312', '984', '1.077095335']
['CAR', 'Central African Republic', 'CAF', '4976719', 'Africa', '14649', '113', '2944', '23', '0.771383712']
['Caribbean Netherlands', 'Bonaire, Sint Eustatius and Saba', 'BES', '26650', 'Latin America and the Caribbean', '8574', '33', '321726', '1238', '0.384884535']
['Cayman Islands', 'Cayman Islands', 'CYM', '67073', 'Latin America and the Caribbean', '20606', '24', '307218', '358', '0.116470931']
['Chad', 'Chad', 'TCD', '17250246', 'Africa', '7308', '191', '424', '11', '2.613574165']
['Channel Islands', 'Guernsey', 'GGY', '176668', 'Europe', '69036', '156', '390767', '883', '0.22596906']
['Chile', 'Chile', 'CHL', '19403451', 'Latin America and the Caribbean', '3486653', '56750', '179692', '2925', '1.627635443']
['China', 'China', 'CHN', '1439323776', 'Asia', '154738', '4638', '108', '3', '2.99732451']
['Colombia', 'Colombia', 'COL', '51832231', 'Latin America and the Caribbean', '6085926', '139660', '117416', '2694', '2.294802796']
['Comoros', 'Comoros', 'COM', '902011', 'Africa', '8093', '160', '8972', '177', '1.977017175']
['Congo', 'Congo', 'COG', '5755689', 'Africa', '24071', '385', '4182', '67', '1.599435005']
['Cook Islands', 'Cook Islands', 'COK', '17592', 'Oceania', '2118', '0', '120396', '0', '0']
['Costa Rica', 'Costa Rica', 'CRI', '5175547', 'Latin America and the Caribbean', '839368', '8308', '162180', '1605', '0.98979232']
['Croatia', 'Croatia', 'HRV', '4060951', 'Europe', '1102730', '15601', '271545', '3842', '1.414761546']
['Cuba', 'Cuba', 'CUB', '11314513', 'Latin America and the Caribbean', '1092547', '8514', '96562', '752', '0.779279976']
['Curaçao', 'Curaçao', 'CUW', '165268', 'Latin America and the Caribbean', '40671', '267', '246091', '1616', '0.656487423']
['Cyprus', 'Cyprus', 'CYP', '1222745', 'Asia', '439964', '947', '359817', '774', '0.215244884']
['Czechia', 'Czech Republic', 'CZE', '10743762', 'Europe', '3830631', '39720', '356545', '3697', '1.036904886']
['Denmark', 'Denmark', 'DNK', '5827911', 'Europe', '2919428', '5762', '500939', '989', '0.19736743']
['Djibouti', 'Djibouti', 'DJI', '1013146', 'Africa', '15590', '189', '15388', '187', '1.212315587']
['Dominica', 'Dominica', 'DMA', '72299', 'Latin America and the Caribbean', '11891', '63', '164470', '871', '0.529812463']
['Dominican Republic', 'Dominican Republic', 'DOM', '11038333', 'Latin America and the Caribbean', '578130', '4375', '52375', '396', '0.756750212']
['Democratic Republic of the Congo', 'Democratic Republic of the Congo', 'COD', '94323344', 'Africa', '86748', '1337', '920', '14', '1.541245908']
['Ecuador', 'Ecuador', 'ECU', '18111933', 'Latin America and the Caribbean', '859890', '35421', '47476', '1956', '4.119247811']
['Egypt', 'Egypt', 'EGY', '105711844', 'Africa', '505264', '24417', '4780', '231', '4.832523196']
['El Salvador', 'El Salvador', 'SLV', '6543499', 'Latin America and the Caribbean', '161570', '4120', '24692', '630', '2.549978338']
['Equatorial Guinea', 'Equatorial Guinea', 'GNQ', '1483588', 'Africa', '15903', '183', '10719', '123', '1.150726278']
['Eritrea', 'Eritrea', 'ERI', '3632329', 'Africa', '9728', '103', '2678', '28', '1.058799342']
['Estonia', 'Estonia', 'EST', '1328097', 'Europe', '558706', '2468', '420682', '1858', '0.441735009']
['Eswatini', 'Eswatini', 'SWZ', '1181191', 'Africa', '69851', '1394', '59136', '1180', '1.995676511']
['Ethiopia', 'Ethiopia', 'ETH', '119945147', 'Africa', '469819', '7504', '3917', '63', '1.597210841']
['Faeroe Islands', 'Faeroe Islands', 'FRO', '49188', 'Europe', '34237', '28', '696044', '569', '0.081782866']
['Falkland Islands', 'Falkland Islands (Malvinas)', 'FLK', '3657', 'Latin America and the Caribbean', '123', '0', '33634', '0', '0']
['Fiji', 'Fiji', 'FJI', '907817', 'Oceania', '64422', '834', '70964', '919', '1.294588805']
['Finland', 'Finland', 'FIN', '5555788', 'Europe', '889626', '3178', '160126', '572', '0.357228768']
['France', 'France', 'FRA', '65526369', 'Europe', '25997852', '142506', '396754', '2175', '0.548145285']
['French Guiana', 'French Guiana', 'GUF', '312224', 'Latin America and the Caribbean', '79075', '394', '253264', '1262', '0.498261144']
['French Polynesia', 'French Polynesia', 'PYF', '283751', 'Oceania', '72318', '646', '254864', '2277', '0.893276916']
['Gabon', 'Gabon', 'GAB', '2317612', 'Africa', '47586', '303', '20532', '131', '0.636741899']
['Gambia', 'Gambia', 'GMB', '2535418', 'Africa', '11988', '365', '4728', '144', '3.044711378']
['Georgia', 'Georgia', 'GEO', '3975762', 'Asia', '1649222', '16756', '414819', '4215', '1.015994208']
['Germany', 'Germany', 'DEU', '84252947', 'Europe', '21646375', '130563', '256921', '1550', '0.603163347']
['Ghana', 'Ghana', 'GHA', '32207812', 'Africa', '160971', '1445', '4998', '45', '0.897677221']
['Gibraltar', 'Gibraltar', 'GIB', '33673', 'Europe', '16979', '101', '504232', '2999', '0.594852465']
['Greece', 'Greece', 'GRC', '10333930', 'Europe', '3077711', '27684', '297826', '2679', '0.899499661']
['Greenland', 'Greenland', 'GRL', '56942', 'Northern America', '11971', '21', '210231', '369', '0.175423941']
['Grenada', 'Grenada', 'GRD', '113436', 'Latin America and the Caribbean', '14024', '218', '123629', '1922', '1.554478038']
['Guadeloupe', 'Guadeloupe', 'GLP', '400244', 'Latin America and the Caribbean', '130705', '843', '326563', '2106', '0.64496385']
['Guatemala', 'Guatemala', 'GTM', '18495493', 'Latin America and the Caribbean', '830745', '17325', '44916', '937', '2.085477493']
['Guinea', 'Guinea', 'GIN', '13755881', 'Africa', '36459', '440', '2650', '32', '1.206835075']
['Guinea-Bissau', 'Guinea-Bissau', 'GNB', '2049374', 'Africa', '8151', '170', '3977', '83', '2.085633665']
['Guyana', 'Guyana', 'GUY', '793196', 'Latin America and the Caribbean', '63272', '1226', '79768', '1546', '1.93766595']
['Haiti', 'Haiti', 'HTI', '11645833', 'Latin America and the Caribbean', '30549', '833', '2623', '72', '2.726766834']
['Honduras', 'Honduras', 'HND', '10180299', 'Latin America and the Caribbean', '421062', '10880', '41360', '1069', '2.583942507']
['Hong Kong', 'China, Hong Kong Special Administrative Region', 'HKG', '7603455', 'Asia', '1171422', '8172', '154064', '1075', '0.69761367']
['Hungary', 'Hungary', 'HUN', '9617409', 'Europe', '1854198', '45510', '192796', '4732', '2.454430433']
['Iceland', 'Iceland', 'ISL', '345120', 'Europe', '181830', '101', '526860', '293', '0.055546389']
['India', 'India', 'IND', '1403754381', 'Asia', '43029044', '521388', '30653', '371', '1.211711792']
['Indonesia', 'Indonesia', 'IDN', '278586508', 'Asia', '6019981', '155288', '21609', '557', '2.579543025']
['Iran', 'United Kingdom', 'IRN', '85874667', 'Asia', '7167646', '140315', '83466', '1634', '1.95761621']
['Iraq', 'Iraq', 'IRQ', '41801625', 'Asia', '2320260', '25173', '55506', '602', '1.084921517']
['Ireland', 'Ireland', 'IRL', '5034333', 'Europe', '1471210', '6786', '292235', '1348', '0.461252982']
['Isle of Man', 'Isle of Man', 'IMN', '85821', 'Europe', '28416', '84', '331108', '979', '0.295608108']
['Israel', 'Israel', 'ISR', '9326000', 'Asia', '3943153', '10530', '422813', '1129', '0.267045179']
['Italy', 'Italy', 'ITA', '60306185', 'Europe', '14846514', '159784', '246186', '2650', '1.076239176']
['Ivory Coast', "Côte d'Ivoire", 'CIV', '27520953', 'Africa', '81761', '796', '2971', '29', '0.973569306']
['Jamaica', 'Jamaica', 'JAM', '2983794', 'Latin America and the Caribbean', '128811', '2893', '43170', '970', '2.245926202']
['Japan', 'Japan', 'JPN', '125798669', 'Asia', '6653841', '28248', '52893', '225', '0.424536745']
['Jordan', 'Jordan', 'JOR', '10380442', 'Asia', '1689314', '14003', '162740', '1349', '0.828916353']
['Kazakhstan', 'Kazakhstan', 'KAZ', '19169833', 'Asia', '1305188', '13660', '68086', '713', '1.046592522']
['Kenya', 'Kenya', 'KEN', '55843563', 'Africa', '323454', '5648', '5792', '101', '1.746152467']
['Kiribati', 'Kiribati', 'KIR', '122656', 'Oceania', '3067', '13', '25005', '106', '0.423866971']
['Kuwait', 'Kuwait', 'KWT', '4381108', 'Asia', '629525', '2554', '143691', '583', '0.405702712']
['Kyrgyzstan', 'Kyrgyzstan', 'KGZ', '6712569', 'Asia', '200968', '2991', '29939', '446', '1.488296644']
['Laos', "Lao People's Democratic Republic", 'LAO', '7460338', 'Asia', '183560', '679', '24605', '91', '0.369906298']
['Latvia', 'Latvia', 'LVA', '1849698', 'Europe', '802534', '5643', '433873', '3051', '0.703147779']
['Lebanon', 'Lebanon', 'LBN', '6771939', 'Asia', '1092995', '10315', '161401', '1523', '0.943737163']
['Lesotho', 'Lesotho', 'LSO', '2171978', 'Africa', '32910', '697', '15152', '321', '2.117897296']
['Liberia', 'Liberia', 'LBR', '5265647', 'Africa', '7400', '294', '1405', '56', '3.972972973']
['Libya', 'Libya', 'LBY', '7034832', 'Africa', '501738', '6419', '71322', '912', '1.279352969']
['Liechtenstein', 'Liechtenstein', 'LIE', '38320', 'Europe', '16429', '84', '428732', '2192', '0.51129101']
['Lithuania', 'Lithuania', 'LTU', '2655811', 'Europe', '1030966', '8907', '388193', '3354', '0.863947017']
['Luxembourg', 'Luxembourg', 'LUX', '643801', 'Europe', '216979', '1037', '337028', '1611', '0.477926435']
['Macao', 'China, Macao Special Administrative Region', 'MAC', '664828', 'Asia', '82', '0', '123', '0', '0']
['Madagascar', 'Madagascar', 'MDG', '28936285', 'Africa', '64050', '1388', '2213', '48', '2.167056987']
['Malawi', 'Malawi', 'MWI', '19994654', 'Africa', '85664', '2626', '4284', '131', '3.065465073']
['Malaysia', 'Malaysia', 'MYS', '33091831', 'Asia', '4246467', '35099', '128324', '1061', '0.826545926']
['Maldives', 'Maldives', 'MDV', '557204', 'Asia', '176993', '298', '317645', '535', '0.168368241']
['Mali', 'Mali', 'MLI', '21271006', 'Africa', '30495', '728', '1434', '34', '2.387276603']
['Malta', 'Malta', 'MLT', '443602', 'Europe', '81596', '641', '183940', '1445', '0.785577724']
['Marshall Islands', 'Marshall Islands', 'MHL', '59889', 'Oceania', '7', '0', '117', '0', '0']
['Martinique', 'Martinique', 'MTQ', '374756', 'Latin America and the Caribbean', '141415', '909', '377352', '2426', '0.642788954']
['Mauritania', 'Mauritania', 'MRT', '4863443', 'Africa', '58670', '982', '12063', '202', '1.673768536']
['Mauritius', 'Mauritius', 'MUS', '1275463', 'Africa', '36628', '968', '28717', '759', '2.642786939']
['Mayotte', 'Mayotte', 'MYTÂ\xa0', '284330', 'Africa', '36891', '187', '129747', '658', '0.506898702']
['Mexico', 'Mexico', 'MEX', '131303955', 'Latin America and the Caribbean', '5665376', '323212', '43147', '2462', '5.705040583']
['Micronesia', 'Micronesia (Federated States of)', 'FSM', '117134', 'Oceania', '1', '0', '9', '0', '0']
['Moldova', 'Republic of Moldova', 'MDA', '4017550', 'Europe', '514199', '11446', '127988', '2849', '2.225986437']
['Monaco', 'Monaco', 'MCO', '39729', 'Europe', '10842', '54', '272899', '1359', '0.498063088']
['Mongolia', 'Mongolia', 'MNG', '3370682', 'Asia', '468610', '2177', '139025', '646', '0.464565417']
['Montenegro', '', 'MNE', '628205', 'Europe', '233326', '2705', '371417', '4306', '1.15932215']
['Montserrat', 'Montserrat', 'MSR', '4997', 'Latin America and the Caribbean', '175', '2', '35021', '400', '1.142857143']
['Morocco', 'Morocco', 'MAR', '37676342', 'Africa', '1163526', '16060', '30882', '426', '1.380287162']
['Mozambique', 'Mozambique', 'MOZ', '32787052', 'Africa', '225266', '2200', '6871', '67', '0.976623192']
['Myanmar', 'Myanmar', 'MMR', '55048340', 'Asia', '611875', '19433', '11115', '353', '3.175975485']
['Namibia', 'Namibia', 'NAM', '2621429', 'Africa', '157646', '4019', '60137', '1533', '2.549382794']
['Nepal', 'Nepal', 'NPL', '30053867', 'Asia', '978475', '11951', '32557', '398', '1.221390429']
['Netherlands', 'Netherlands', 'NLD', '17201245', 'Europe', '7908701', '22016', '459775', '1280', '0.278376942']
['New Caledonia', 'New Caledonia', 'NCL', '290302', 'Oceania', '60294', '311', '207694', '1071', '0.515805884']
['New Zealand', 'New Zealand', 'NZL', '5002100', 'Oceania', '693219', '350', '138586', '70', '0.050489095']
['Nicaragua', 'Nicaragua', 'NIC', '6762511', 'Latin America and the Caribbean', '18434', '224', '2726', '33', '1.215145926']
['Niger', 'Niger', 'NER', '25738714', 'Africa', '8811', '308', '342', '12', '3.495630462']
['Nigeria', 'Nigeria', 'NGA', '215077352', 'Africa', '255468', '3142', '1188', '15', '1.229899635']
['Niue', 'Niue', 'NIU', '1645', 'Oceania', '7', '0', '4255', '0', '0']
['North Macedonia', 'The former Yugoslav Republic of Macedonia', 'MKD', '2083224', 'Europe', '306670', '9228', '147209', '4430', '3.009097727']
['Norway', 'Norway', 'NOR', '5495449', 'Europe', '1408708', '2518', '256341', '458', '0.178745347']
['Oman', 'Oman', 'OMN', '5333815', 'Asia', '388468', '4251', '72831', '797', '1.094298629']
['Pakistan', 'Pakistan', 'PAK', '228397520', 'Asia', '1525466', '30361', '6679', '133', '1.990277069']
['Palau', 'Palau', 'PLW', '18245', 'Oceania', '4042', '6', '221540', '329', '0.148441366']
['Palestine', 'State of Palestine', 'WBG', '5308883', 'Asia', '581236', '5351', '109484', '1008', '0.920624325']
['Panama', 'Panama', 'PAN', '4433639', 'Latin America and the Caribbean', '765213', '8170', '172593', '1843', '1.067676582']
['Papua New Guinea', 'Papua New Guinea', 'PNG', '9243590', 'Oceania', '42203', '640', '4566', '69', '1.516479871']
['Paraguay', 'Paraguay', 'PRY', '7285892', 'Latin America and the Caribbean', '648353', '18731', '88987', '2571', '2.889012621']
['Peru', 'Peru', 'PER', '33775745', 'Latin America and the Caribbean', '3548559', '212328', '105062', '6286', '5.983499218']
['Philippines', 'Philippines', 'PHL', '112133868', 'Asia', '3679485', '59343', '32813', '529', '1.612807227']
['Poland', 'Poland', 'POL', '37774045', 'Europe', '5969621', '115345', '158035', '3054', '1.932199716']
['Portugal', 'Portugal', 'PRT', '10144662', 'Europe', '3604114', '21693', '355272', '2138', '0.601895501']
['Qatar', 'Qatar', 'QAT', '2807805', 'Asia', '361819', '677', '128862', '241', '0.18711013']
['Réunion', 'Réunion', 'REU', '906497', 'Africa', '336945', '709', '371700', '782', '0.210420098']
['Romania', 'Romania', 'ROU', '19013049', 'Europe', '2860094', '65090', '150428', '3423', '2.275799327']
['Russia', 'Russian Federation', 'RUS', '146044010', 'Europe', '17896866', '369708', '122544', '2531', '2.065769504']
['Rwanda', 'Rwanda', 'RWA', '13513881', 'Africa', '129728', '1458', '9600', '108', '1.123889985']
['S. Korea', 'Republic of Korea', 'KOR', '51346429', 'Asia', '13874216', '17235', '270208', '336', '0.124223235']
['Saint Helena', 'Saint Helena', 'SHN', '6109', 'Africa', '2', '0', '327', '0', '0']
['Saint Kitts and Nevis', 'Saint Kitts and Nevis', 'KNA', '53858', 'Latin America and the Caribbean', '5549', '43', '103030', '798', '0.774914399']
['Saint Lucia', 'Saint Lucia', 'LCA', '185096', 'Latin America and the Caribbean', '22964', '365', '124065', '1972', '1.589444348']
['Saint Martin', 'Saint Martin', 'MAF', '39820', 'Latin America and the Caribbean', '10107', '63', '253817', '1582', '0.623330365']
['Saint Pierre Miquelon', '\xa0Saint Pierre and Miquelon', 'SPM', '5744', 'Northern America', '1957', '1', '340703', '174', '0.05109862']
['Samoa', 'Samoa', 'WSM', '200722', 'Oceania', '2285', '1', '11384', '5', '0.043763676']
['San Marino', 'San Marino', 'SMR', '34056', 'Europe', '15181', '113', '445766', '3318', '0.744351492']
['Sao Tome and Principe', 'Sao Tome and Principe', 'STP', '226281', 'Africa', '5945', '73', '26273', '323', '1.227922624']
['Saudi Arabia', 'Saudi Arabia', 'SAU', '35762746', 'Asia', '751076', '9048', '21002', '253', '1.204671698']
['Senegal', 'Senegal', 'SEN', '17515750', 'Africa', '85919', '1965', '4905', '112', '2.287037791']
['Serbia', 'Serbia', 'SRB', '8675762', 'Europe', '1980722', '15825', '228305', '1824', '0.79895109']
['Seychelles', 'Seychelles', 'SYC', '99413', 'Africa', '40421', '164', '406597', '1650', '0.405729695']
['Sierra Leone', 'Sierra Leone', 'SLE', '8260822', 'Africa', '7674', '125', '929', '15', '1.628876727']
['Singapore', 'Singapore', 'SGP', '5930887', 'Asia', '1109744', '1276', '187113', '215', '0.114981473']
['Sint Maarten', 'Sint Maarten', 'SXM', '43728', 'Latin America and the Caribbean', '9766', '86', '223335', '1967', '0.880606185']
['Slovakia', 'Slovakia', 'SVK', '5464272', 'Europe', '1725487', '19417', '315776', '3553', '1.125305493']
['Slovenia', 'Slovenia', 'SVN', '2079438', 'Europe', '973892', '6501', '468344', '3126', '0.667527816']
['Solomon Islands', 'Solomon Islands', 'SLB', '716351', 'Oceania', '11470', '133', '16012', '186', '1.159546643']
['Somalia', 'Somalia', 'SOM', '16668781', 'Africa', '26400', '1348', '1584', '81', '5.106060606']
['South Africa', 'South Africa', 'ZAF', '60617532', 'Africa', '3722954', '100050', '61417', '1651', '2.687382116']
['South Sudan', 'South Sudan', 'SSD', '11423439', 'Africa', '17278', '138', '1513', '12', '0.798703554']
['Spain', 'Spain', 'ESP', '46786482', 'Europe', '11551574', '102541', '246900', '2192', '0.887679895']
['Sri Lanka', 'Sri Lanka', 'LKA', '21570428', 'Asia', '661991', '16481', '30690', '764', '2.489610886']
['St. Barth ', 'Saint Barthélemy', 'BLM', '9930', 'Latin America and the Caribbean', '4150', '6', '417925', '604', '0.144578313']
['St. Vincent Grenadines', 'Saint Vincent and the Grenadines', 'VCT', '111557', 'Latin America and the Caribbean', '6746', '106', '60471', '950', '1.571301512']
['Sudan', 'Sudan', 'SDN', '45640385', 'Africa', '61955', '4907', '1357', '108', '7.920264708']
['Suriname', 'Suriname', 'SUR', '595833', 'Latin America and the Caribbean', '79232', '1325', '132977', '2224', '1.67230412']
['Sweden', 'Sweden', 'SWE', '10209507', 'Europe', '2487852', '18331', '243680', '1795', '0.736820357']
['Switzerland', 'Switzerland', 'CHE', '8765420', 'Europe', '3490876', '13715', '398255', '1565', '0.392881328']
['Syria', 'Syrian Arab Republic', 'SYR', '18244381', 'Asia', '55711', '3144', '3054', '172', '5.64340974']
['Taiwan', 'China, Taiwan Province of China', 'TWN', '23892241', 'Asia', '24310', '853', '1017', '36', '3.508844097']
['Tajikistan', 'Tajikistan', 'TJK', '9912437', 'Asia', '17388', '124', '1754', '13', '0.713135496']
['Tanzania', 'United Republic of Tanzania', 'TZA', '62710097', 'Africa', '33815', '800', '539', '13', '2.365813988']
['Thailand', 'Thailand', 'THA', '70106601', 'Asia', '3711595', '25418', '52942', '363', '0.684826874']
['Timor-Leste', 'Timor-Leste', 'TLS', '1362386', 'Asia', '22832', '130', '16759', '95', '0.569376314']
['Togo', 'Togo', 'TGO', '8618172', 'Africa', '36944', '272', '4287', '32', '0.736249459']
['Tonga', 'Tonga', 'TON', '107792', 'Oceania', '7127', '9', '66118', '83', '0.126280342']
['Trinidad and Tobago', 'Trinidad and Tobago', 'TTO', '1407422', 'Latin America and the Caribbean', '138425', '3756', '98354', '2669', '2.713382698']
['Tunisia', 'Tunisia', 'TUN', '12035092', 'Africa', '1035884', '28323', '86072', '2353', '2.734186453']
['Turkey', 'Turkey', 'TUR', '85927644', 'Asia', '14894731', '98157', '173340', '1142', '0.659004852']
['Turks and Caicos', 'Turks and Caicos Islands', 'TCAÂ\xa0', '39634', 'Latin America and the Caribbean', '5910', '36', '149114', '908', '0.609137056']
['UAE', 'United Arab Emirates', 'ARE', '10099567', 'Asia', '892170', '2302', '88337', '228', '0.258022574']
['Uganda', 'Uganda', 'UGA', '48267221', 'Africa', '163936', '3595', '3396', '74', '2.192928948']
['UK', 'United Kingdom of Great Britain and Northern Ireland', 'GBR', '68510300', 'Europe', '21216874', '165570', '309689', '2417', '0.780369436']
['Ukraine', 'Ukraine', 'UKR', '43273831', 'Europe', '4968881', '107980', '114824', '2495', '2.173125096']
['Uruguay', 'Uruguay', 'URY', '3494806', 'Latin America and the Caribbean', '889513', '7166', '254524', '2050', '0.805609362']
['USA', 'United States of America', 'USA', '334400597', 'Northern America', '81839052', '1008222', '244734', '3015', '1.231957086']
['Uzbekistan', 'Uzbekistan', 'UZB', '34318156', 'Asia', '237853', '1637', '6931', '48', '0.688240216']
['Vanuatu', 'Vanuatu', 'VUT', '319701', 'Oceania', '4107', '2', '12846', '6', '0.048697346']
['Vatican City', 'Holy See', 'VAT', '805', 'Europe', '29', '0', '36025', '0', '0']
['Venezuela', 'Venezuela (Bolivarian Republic of)', 'VEN', '28294895', 'Latin America and the Caribbean', '520843', '5686', '18408', '201', '1.091691738']
['Vietnam', 'Viet Nam', 'VNM', '98871712', 'Asia', '9818328', '42600', '99304', '431', '0.433882429']
['Wallis and Futuna', 'Wallis and Futuna Islands', 'WLF', '10894', 'Oceania', '454', '7', '41674', '643', '1.54185022']
['Western Sahara', 'Western Sahara', 'ESHÂ\xa0', '623031', 'Africa', '10', '1', '16', '2', '10']
['Yemen', 'Yemen', 'YEM', '30975258', 'Asia', '11806', '2143', '381', '69', '18.15178723']
['Zambia', 'Zambia', 'ZMB', '19284482', 'Africa', '317076', '3967', '16442', '206', '1.251119605']
['Zimbabwe', 'Zimbabwe', 'ZWE', '15241601', 'Africa', '246525', '5446', '16174', '357', '2.209106581']
with open(local_file1, 'r') as file:
csv_file = csv.DictReader(file)
for row in csv_file:
print(dict(row))
{'Country': 'Afghanistan', 'Other names': 'Afghanistan', 'ISO 3166-1 alpha-3 CODE': 'AFG', 'Population': '40462186', 'Continent': 'Asia', 'Total Cases': '177827', 'Total Deaths': '7671', 'Tot\xa0Cases//1M pop': '4395', 'Tot\xa0Deaths/1M pop': '190', 'Death percentage': '4.313743132'}
{'Country': 'Albania', 'Other names': 'Albania', 'ISO 3166-1 alpha-3 CODE': 'ALB', 'Population': '2872296', 'Continent': 'Europe', 'Total Cases': '273870', 'Total Deaths': '3492', 'Tot\xa0Cases//1M pop': '95349', 'Tot\xa0Deaths/1M pop': '1216', 'Death percentage': '1.275057509'}
{'Country': 'Algeria', 'Other names': 'Algeria', 'ISO 3166-1 alpha-3 CODE': 'DZA', 'Population': '45236699', 'Continent': 'Africa', 'Total Cases': '265691', 'Total Deaths': '6874', 'Tot\xa0Cases//1M pop': '5873', 'Tot\xa0Deaths/1M pop': '152', 'Death percentage': '2.587215976'}
{'Country': 'Andorra', 'Other names': 'Andorra', 'ISO 3166-1 alpha-3 CODE': 'AND', 'Population': '77481', 'Continent': 'Europe', 'Total Cases': '40024', 'Total Deaths': '153', 'Tot\xa0Cases//1M pop': '516565', 'Tot\xa0Deaths/1M pop': '1975', 'Death percentage': '0.382270638'}
{'Country': 'Angola', 'Other names': 'Angola', 'ISO 3166-1 alpha-3 CODE': 'AGO', 'Population': '34654212', 'Continent': 'Africa', 'Total Cases': '99194', 'Total Deaths': '1900', 'Tot\xa0Cases//1M pop': '2862', 'Tot\xa0Deaths/1M pop': '55', 'Death percentage': '1.915438434'}
{'Country': 'Anguilla', 'Other names': 'Anguilla', 'ISO 3166-1 alpha-3 CODE': 'AIA', 'Population': '15237', 'Continent': 'Latin America and the Caribbean', 'Total Cases': '2700', 'Total Deaths': '9', 'Tot\xa0Cases//1M pop': '177200', 'Tot\xa0Deaths/1M pop': '591', 'Death percentage': '0.333333333'}
{'Country': 'Antigua and Barbuda', 'Other names': 'Antigua and Barbuda', 'ISO 3166-1 alpha-3 CODE': 'ATG', 'Population': '99348', 'Continent': 'Latin America and the Caribbean', 'Total Cases': '7493', 'Total Deaths': '135', 'Tot\xa0Cases//1M pop': '75422', 'Tot\xa0Deaths/1M pop': '1359', 'Death percentage': '1.801681569'}
{'Country': 'Argentina', 'Other names': 'Argentina', 'ISO 3166-1 alpha-3 CODE': 'ARG', 'Population': '45921761', 'Continent': 'Latin America and the Caribbean', 'Total Cases': '9041124', 'Total Deaths': '128065', 'Tot\xa0Cases//1M pop': '196881', 'Tot\xa0Deaths/1M pop': '2789', 'Death percentage': '1.416472111'}
{'Country': 'Armenia', 'Other names': 'Armenia', 'ISO 3166-1 alpha-3 CODE': 'ARM', 'Population': '2972939', 'Continent': 'Asia', 'Total Cases': '422574', 'Total Deaths': '8617', 'Tot\xa0Cases//1M pop': '142140', 'Tot\xa0Deaths/1M pop': '2898', 'Death percentage': '2.039169471'}
{'Country': 'Aruba', 'Other names': 'Aruba', 'ISO 3166-1 alpha-3 CODE': 'ABW', 'Population': '107560', 'Continent': 'Latin America and the Caribbean', 'Total Cases': '34051', 'Total Deaths': '212', 'Tot\xa0Cases//1M pop': '316577', 'Tot\xa0Deaths/1M pop': '1971', 'Death percentage': '0.622595518'}
{'Country': 'Australia', 'Other names': 'Australia', 'ISO 3166-1 alpha-3 CODE': 'AUS', 'Population': '26017767', 'Continent': 'Oceania', 'Total Cases': '4680816', 'Total Deaths': '6384', 'Tot\xa0Cases//1M pop': '179908', 'Tot\xa0Deaths/1M pop': '245', 'Death percentage': '0.136386476'}
{'Country': 'Austria', 'Other names': 'Austria', 'ISO 3166-1 alpha-3 CODE': 'AUT', 'Population': '9096360', 'Continent': 'Europe', 'Total Cases': '3887355', 'Total Deaths': '15985', 'Tot\xa0Cases//1M pop': '427353', 'Tot\xa0Deaths/1M pop': '1757', 'Death percentage': '0.411205048'}
{'Country': 'Azerbaijan', 'Other names': 'Azerbaijan', 'ISO 3166-1 alpha-3 CODE': 'AZE', 'Population': '10299156', 'Continent': 'Asia', 'Total Cases': '792061', 'Total Deaths': '9697', 'Tot\xa0Cases//1M pop': '76905', 'Tot\xa0Deaths/1M pop': '942', 'Death percentage': '1.224274393'}
{'Country': 'Bahamas', 'Other names': 'Bahamas', 'ISO 3166-1 alpha-3 CODE': 'BHM', 'Population': '399822', 'Continent': 'Latin America and the Caribbean', 'Total Cases': '33295', 'Total Deaths': '788', 'Tot\xa0Cases//1M pop': '83275', 'Tot\xa0Deaths/1M pop': '1971', 'Death percentage': '2.36672173'}
{'Country': 'Bahrain', 'Other names': 'Bahrain', 'ISO 3166-1 alpha-3 CODE': 'BHR', 'Population': '1804995', 'Continent': 'Asia', 'Total Cases': '556241', 'Total Deaths': '1471', 'Tot\xa0Cases//1M pop': '308168', 'Tot\xa0Deaths/1M pop': '815', 'Death percentage': '0.264453717'}
{'Country': 'Bangladesh', 'Other names': 'Bangladesh', 'ISO 3166-1 alpha-3 CODE': 'BGD', 'Population': '167561502', 'Continent': 'Asia', 'Total Cases': '1951770', 'Total Deaths': '29122', 'Tot\xa0Cases//1M pop': '11648', 'Tot\xa0Deaths/1M pop': '174', 'Death percentage': '1.492081546'}
{'Country': 'Barbados', 'Other names': 'Barbados', 'ISO 3166-1 alpha-3 CODE': 'BRB', 'Population': '287991', 'Continent': 'Latin America and the Caribbean', 'Total Cases': '59938', 'Total Deaths': '375', 'Tot\xa0Cases//1M pop': '208125', 'Tot\xa0Deaths/1M pop': '1302', 'Death percentage': '0.625646501'}
{'Country': 'Belarus', 'Other names': 'Belarus', 'ISO 3166-1 alpha-3 CODE': 'BLR', 'Population': '9443882', 'Continent': 'Europe', 'Total Cases': '965322', 'Total Deaths': '6844', 'Tot\xa0Cases//1M pop': '102217', 'Tot\xa0Deaths/1M pop': '725', 'Death percentage': '0.708986224'}
{'Country': 'Belgium', 'Other names': 'Belgium', 'ISO 3166-1 alpha-3 CODE': 'BEL', 'Population': '11677924', 'Continent': 'Europe', 'Total Cases': '3851048', 'Total Deaths': '30826', 'Tot\xa0Cases//1M pop': '329772', 'Tot\xa0Deaths/1M pop': '2640', 'Death percentage': '0.800457434'}
{'Country': 'Belize', 'Other names': 'Belize', 'ISO 3166-1 alpha-3 CODE': 'BLZ', 'Population': '410260', 'Continent': 'Latin America and the Caribbean', 'Total Cases': '57289', 'Total Deaths': '656', 'Tot\xa0Cases//1M pop': '139641', 'Tot\xa0Deaths/1M pop': '1599', 'Death percentage': '1.14507148'}
{'Country': 'Benin', 'Other names': 'Benin', 'ISO 3166-1 alpha-3 CODE': 'BEN', 'Population': '12678649', 'Continent': 'Africa', 'Total Cases': '26952', 'Total Deaths': '163', 'Tot\xa0Cases//1M pop': '2126', 'Tot\xa0Deaths/1M pop': '13', 'Death percentage': '0.604778866'}
{'Country': 'Bermuda', 'Other names': 'Bermuda', 'ISO 3166-1 alpha-3 CODE': 'BMU', 'Population': '61875', 'Continent': 'Northern America', 'Total Cases': '12564', 'Total Deaths': '128', 'Tot\xa0Cases//1M pop': '203055', 'Tot\xa0Deaths/1M pop': '2069', 'Death percentage': '1.018783827'}
{'Country': 'Bhutan', 'Other names': 'Bhutan', 'ISO 3166-1 alpha-3 CODE': 'BTN', 'Population': '786480', 'Continent': 'Asia', 'Total Cases': '31437', 'Total Deaths': '12', 'Tot\xa0Cases//1M pop': '39972', 'Tot\xa0Deaths/1M pop': '15', 'Death percentage': '0.038171581'}
{'Country': 'Bolivia', 'Other names': 'Bolivia (Plurinational State of)', 'ISO 3166-1 alpha-3 CODE': 'BOL', 'Population': '11951714', 'Continent': 'Latin America and the Caribbean', 'Total Cases': '902448', 'Total Deaths': '21896', 'Tot\xa0Cases//1M pop': '75508', 'Tot\xa0Deaths/1M pop': '1832', 'Death percentage': '2.426289382'}
{'Country': 'Bosnia and Herzegovina', 'Other names': 'Bosnia and Herzegovina', 'ISO 3166-1 alpha-3 CODE': 'BIH', 'Population': '3245097', 'Continent': 'Europe', 'Total Cases': '375693', 'Total Deaths': '15719', 'Tot\xa0Cases//1M pop': '115773', 'Tot\xa0Deaths/1M pop': '4844', 'Death percentage': '4.184001299'}
{'Country': 'Botswana', 'Other names': 'Botswana', 'ISO 3166-1 alpha-3 CODE': 'BWA', 'Population': '2434708', 'Continent': 'Africa', 'Total Cases': '305526', 'Total Deaths': '2686', 'Tot\xa0Cases//1M pop': '125488', 'Tot\xa0Deaths/1M pop': '1103', 'Death percentage': '0.879139582'}
{'Country': 'Brazil', 'Other names': 'Brazil', 'ISO 3166-1 alpha-3 CODE': 'BRA', 'Population': '215204501', 'Continent': 'Latin America and the Caribbean', 'Total Cases': '29999816', 'Total Deaths': '660269', 'Tot\xa0Cases//1M pop': '139401', 'Tot\xa0Deaths/1M pop': '3068', 'Death percentage': '2.200910166'}
{'Country': 'British Virgin Islands', 'Other names': 'British Virgin Islands', 'ISO 3166-1 alpha-3 CODE': 'VGB', 'Population': '30583', 'Continent': 'Latin America and the Caribbean', 'Total Cases': '6155', 'Total Deaths': '62', 'Tot\xa0Cases//1M pop': '201256', 'Tot\xa0Deaths/1M pop': '2027', 'Death percentage': '1.007311129'}
{'Country': 'Brunei ', 'Other names': 'Brunei Darussalam', 'ISO 3166-1 alpha-3 CODE': 'BRN', 'Population': '444812', 'Continent': 'Asia', 'Total Cases': '135974', 'Total Deaths': '213', 'Tot\xa0Cases//1M pop': '305689', 'Tot\xa0Deaths/1M pop': '479', 'Death percentage': '0.156647594'}
{'Country': 'Bulgaria', 'Other names': 'Bulgaria', 'ISO 3166-1 alpha-3 CODE': 'BGR', 'Population': '6856886', 'Continent': 'Europe', 'Total Cases': '1140679', 'Total Deaths': '36568', 'Tot\xa0Cases//1M pop': '166355', 'Tot\xa0Deaths/1M pop': '5333', 'Death percentage': '3.205809873'}
{'Country': 'Burkina Faso', 'Other names': 'Burkina Faso', 'ISO 3166-1 alpha-3 CODE': 'BFA', 'Population': '21905848', 'Continent': 'Africa', 'Total Cases': '20853', 'Total Deaths': '382', 'Tot\xa0Cases//1M pop': '952', 'Tot\xa0Deaths/1M pop': '17', 'Death percentage': '1.831870714'}
{'Country': 'Burundi', 'Other names': 'Burundi', 'ISO 3166-1 alpha-3 CODE': 'BDI', 'Population': '12510155', 'Continent': 'Africa', 'Total Cases': '38519', 'Total Deaths': '38', 'Tot\xa0Cases//1M pop': '3079', 'Tot\xa0Deaths/1M pop': '3', 'Death percentage': '0.098652613'}
{'Country': 'Cabo Verde', 'Other names': 'Cabo Verde', 'ISO 3166-1 alpha-3 CODE': 'CPV', 'Population': '566557', 'Continent': 'Africa', 'Total Cases': '55960', 'Total Deaths': '401', 'Tot\xa0Cases//1M pop': '98772', 'Tot\xa0Deaths/1M pop': '708', 'Death percentage': '0.716583274'}
{'Country': 'Cambodia', 'Other names': 'Cambodia', 'ISO 3166-1 alpha-3 CODE': 'KHM', 'Population': '17123941', 'Continent': 'Asia', 'Total Cases': '135747', 'Total Deaths': '3054', 'Tot\xa0Cases//1M pop': '7927', 'Tot\xa0Deaths/1M pop': '178', 'Death percentage': '2.249773476'}
{'Country': 'Cameroon', 'Other names': 'Cameroon', 'ISO 3166-1 alpha-3 CODE': 'CMR', 'Population': '27701805', 'Continent': 'Africa', 'Total Cases': '119544', 'Total Deaths': '1927', 'Tot\xa0Cases//1M pop': '4315', 'Tot\xa0Deaths/1M pop': '70', 'Death percentage': '1.611958777'}
{'Country': 'Canada', 'Other names': 'Canada', 'ISO 3166-1 alpha-3 CODE': 'CAN', 'Population': '38321435', 'Continent': 'Northern America', 'Total Cases': '3499226', 'Total Deaths': '37690', 'Tot\xa0Cases//1M pop': '91312', 'Tot\xa0Deaths/1M pop': '984', 'Death percentage': '1.077095335'}
{'Country': 'CAR', 'Other names': 'Central African Republic', 'ISO 3166-1 alpha-3 CODE': 'CAF', 'Population': '4976719', 'Continent': 'Africa', 'Total Cases': '14649', 'Total Deaths': '113', 'Tot\xa0Cases//1M pop': '2944', 'Tot\xa0Deaths/1M pop': '23', 'Death percentage': '0.771383712'}
{'Country': 'Caribbean Netherlands', 'Other names': 'Bonaire, Sint Eustatius and Saba', 'ISO 3166-1 alpha-3 CODE': 'BES', 'Population': '26650', 'Continent': 'Latin America and the Caribbean', 'Total Cases': '8574', 'Total Deaths': '33', 'Tot\xa0Cases//1M pop': '321726', 'Tot\xa0Deaths/1M pop': '1238', 'Death percentage': '0.384884535'}
{'Country': 'Cayman Islands', 'Other names': 'Cayman Islands', 'ISO 3166-1 alpha-3 CODE': 'CYM', 'Population': '67073', 'Continent': 'Latin America and the Caribbean', 'Total Cases': '20606', 'Total Deaths': '24', 'Tot\xa0Cases//1M pop': '307218', 'Tot\xa0Deaths/1M pop': '358', 'Death percentage': '0.116470931'}
{'Country': 'Chad', 'Other names': 'Chad', 'ISO 3166-1 alpha-3 CODE': 'TCD', 'Population': '17250246', 'Continent': 'Africa', 'Total Cases': '7308', 'Total Deaths': '191', 'Tot\xa0Cases//1M pop': '424', 'Tot\xa0Deaths/1M pop': '11', 'Death percentage': '2.613574165'}
{'Country': 'Channel Islands', 'Other names': 'Guernsey', 'ISO 3166-1 alpha-3 CODE': 'GGY', 'Population': '176668', 'Continent': 'Europe', 'Total Cases': '69036', 'Total Deaths': '156', 'Tot\xa0Cases//1M pop': '390767', 'Tot\xa0Deaths/1M pop': '883', 'Death percentage': '0.22596906'}
{'Country': 'Chile', 'Other names': 'Chile', 'ISO 3166-1 alpha-3 CODE': 'CHL', 'Population': '19403451', 'Continent': 'Latin America and the Caribbean', 'Total Cases': '3486653', 'Total Deaths': '56750', 'Tot\xa0Cases//1M pop': '179692', 'Tot\xa0Deaths/1M pop': '2925', 'Death percentage': '1.627635443'}
{'Country': 'China', 'Other names': 'China', 'ISO 3166-1 alpha-3 CODE': 'CHN', 'Population': '1439323776', 'Continent': 'Asia', 'Total Cases': '154738', 'Total Deaths': '4638', 'Tot\xa0Cases//1M pop': '108', 'Tot\xa0Deaths/1M pop': '3', 'Death percentage': '2.99732451'}
{'Country': 'Colombia', 'Other names': 'Colombia', 'ISO 3166-1 alpha-3 CODE': 'COL', 'Population': '51832231', 'Continent': 'Latin America and the Caribbean', 'Total Cases': '6085926', 'Total Deaths': '139660', 'Tot\xa0Cases//1M pop': '117416', 'Tot\xa0Deaths/1M pop': '2694', 'Death percentage': '2.294802796'}
{'Country': 'Comoros', 'Other names': 'Comoros', 'ISO 3166-1 alpha-3 CODE': 'COM', 'Population': '902011', 'Continent': 'Africa', 'Total Cases': '8093', 'Total Deaths': '160', 'Tot\xa0Cases//1M pop': '8972', 'Tot\xa0Deaths/1M pop': '177', 'Death percentage': '1.977017175'}
{'Country': 'Congo', 'Other names': 'Congo', 'ISO 3166-1 alpha-3 CODE': 'COG', 'Population': '5755689', 'Continent': 'Africa', 'Total Cases': '24071', 'Total Deaths': '385', 'Tot\xa0Cases//1M pop': '4182', 'Tot\xa0Deaths/1M pop': '67', 'Death percentage': '1.599435005'}
{'Country': 'Cook Islands', 'Other names': 'Cook Islands', 'ISO 3166-1 alpha-3 CODE': 'COK', 'Population': '17592', 'Continent': 'Oceania', 'Total Cases': '2118', 'Total Deaths': '0', 'Tot\xa0Cases//1M pop': '120396', 'Tot\xa0Deaths/1M pop': '0', 'Death percentage': '0'}
{'Country': 'Costa Rica', 'Other names': 'Costa Rica', 'ISO 3166-1 alpha-3 CODE': 'CRI', 'Population': '5175547', 'Continent': 'Latin America and the Caribbean', 'Total Cases': '839368', 'Total Deaths': '8308', 'Tot\xa0Cases//1M pop': '162180', 'Tot\xa0Deaths/1M pop': '1605', 'Death percentage': '0.98979232'}
{'Country': 'Croatia', 'Other names': 'Croatia', 'ISO 3166-1 alpha-3 CODE': 'HRV', 'Population': '4060951', 'Continent': 'Europe', 'Total Cases': '1102730', 'Total Deaths': '15601', 'Tot\xa0Cases//1M pop': '271545', 'Tot\xa0Deaths/1M pop': '3842', 'Death percentage': '1.414761546'}
{'Country': 'Cuba', 'Other names': 'Cuba', 'ISO 3166-1 alpha-3 CODE': 'CUB', 'Population': '11314513', 'Continent': 'Latin America and the Caribbean', 'Total Cases': '1092547', 'Total Deaths': '8514', 'Tot\xa0Cases//1M pop': '96562', 'Tot\xa0Deaths/1M pop': '752', 'Death percentage': '0.779279976'}
{'Country': 'Curaçao', 'Other names': 'Curaçao', 'ISO 3166-1 alpha-3 CODE': 'CUW', 'Population': '165268', 'Continent': 'Latin America and the Caribbean', 'Total Cases': '40671', 'Total Deaths': '267', 'Tot\xa0Cases//1M pop': '246091', 'Tot\xa0Deaths/1M pop': '1616', 'Death percentage': '0.656487423'}
{'Country': 'Cyprus', 'Other names': 'Cyprus', 'ISO 3166-1 alpha-3 CODE': 'CYP', 'Population': '1222745', 'Continent': 'Asia', 'Total Cases': '439964', 'Total Deaths': '947', 'Tot\xa0Cases//1M pop': '359817', 'Tot\xa0Deaths/1M pop': '774', 'Death percentage': '0.215244884'}
{'Country': 'Czechia', 'Other names': 'Czech Republic', 'ISO 3166-1 alpha-3 CODE': 'CZE', 'Population': '10743762', 'Continent': 'Europe', 'Total Cases': '3830631', 'Total Deaths': '39720', 'Tot\xa0Cases//1M pop': '356545', 'Tot\xa0Deaths/1M pop': '3697', 'Death percentage': '1.036904886'}
{'Country': 'Denmark', 'Other names': 'Denmark', 'ISO 3166-1 alpha-3 CODE': 'DNK', 'Population': '5827911', 'Continent': 'Europe', 'Total Cases': '2919428', 'Total Deaths': '5762', 'Tot\xa0Cases//1M pop': '500939', 'Tot\xa0Deaths/1M pop': '989', 'Death percentage': '0.19736743'}
{'Country': 'Djibouti', 'Other names': 'Djibouti', 'ISO 3166-1 alpha-3 CODE': 'DJI', 'Population': '1013146', 'Continent': 'Africa', 'Total Cases': '15590', 'Total Deaths': '189', 'Tot\xa0Cases//1M pop': '15388', 'Tot\xa0Deaths/1M pop': '187', 'Death percentage': '1.212315587'}
{'Country': 'Dominica', 'Other names': 'Dominica', 'ISO 3166-1 alpha-3 CODE': 'DMA', 'Population': '72299', 'Continent': 'Latin America and the Caribbean', 'Total Cases': '11891', 'Total Deaths': '63', 'Tot\xa0Cases//1M pop': '164470', 'Tot\xa0Deaths/1M pop': '871', 'Death percentage': '0.529812463'}
{'Country': 'Dominican Republic', 'Other names': 'Dominican Republic', 'ISO 3166-1 alpha-3 CODE': 'DOM', 'Population': '11038333', 'Continent': 'Latin America and the Caribbean', 'Total Cases': '578130', 'Total Deaths': '4375', 'Tot\xa0Cases//1M pop': '52375', 'Tot\xa0Deaths/1M pop': '396', 'Death percentage': '0.756750212'}
{'Country': 'Democratic Republic of the Congo', 'Other names': 'Democratic Republic of the Congo', 'ISO 3166-1 alpha-3 CODE': 'COD', 'Population': '94323344', 'Continent': 'Africa', 'Total Cases': '86748', 'Total Deaths': '1337', 'Tot\xa0Cases//1M pop': '920', 'Tot\xa0Deaths/1M pop': '14', 'Death percentage': '1.541245908'}
{'Country': 'Ecuador', 'Other names': 'Ecuador', 'ISO 3166-1 alpha-3 CODE': 'ECU', 'Population': '18111933', 'Continent': 'Latin America and the Caribbean', 'Total Cases': '859890', 'Total Deaths': '35421', 'Tot\xa0Cases//1M pop': '47476', 'Tot\xa0Deaths/1M pop': '1956', 'Death percentage': '4.119247811'}
{'Country': 'Egypt', 'Other names': 'Egypt', 'ISO 3166-1 alpha-3 CODE': 'EGY', 'Population': '105711844', 'Continent': 'Africa', 'Total Cases': '505264', 'Total Deaths': '24417', 'Tot\xa0Cases//1M pop': '4780', 'Tot\xa0Deaths/1M pop': '231', 'Death percentage': '4.832523196'}
{'Country': 'El Salvador', 'Other names': 'El Salvador', 'ISO 3166-1 alpha-3 CODE': 'SLV', 'Population': '6543499', 'Continent': 'Latin America and the Caribbean', 'Total Cases': '161570', 'Total Deaths': '4120', 'Tot\xa0Cases//1M pop': '24692', 'Tot\xa0Deaths/1M pop': '630', 'Death percentage': '2.549978338'}
{'Country': 'Equatorial Guinea', 'Other names': 'Equatorial Guinea', 'ISO 3166-1 alpha-3 CODE': 'GNQ', 'Population': '1483588', 'Continent': 'Africa', 'Total Cases': '15903', 'Total Deaths': '183', 'Tot\xa0Cases//1M pop': '10719', 'Tot\xa0Deaths/1M pop': '123', 'Death percentage': '1.150726278'}
{'Country': 'Eritrea', 'Other names': 'Eritrea', 'ISO 3166-1 alpha-3 CODE': 'ERI', 'Population': '3632329', 'Continent': 'Africa', 'Total Cases': '9728', 'Total Deaths': '103', 'Tot\xa0Cases//1M pop': '2678', 'Tot\xa0Deaths/1M pop': '28', 'Death percentage': '1.058799342'}
{'Country': 'Estonia', 'Other names': 'Estonia', 'ISO 3166-1 alpha-3 CODE': 'EST', 'Population': '1328097', 'Continent': 'Europe', 'Total Cases': '558706', 'Total Deaths': '2468', 'Tot\xa0Cases//1M pop': '420682', 'Tot\xa0Deaths/1M pop': '1858', 'Death percentage': '0.441735009'}
{'Country': 'Eswatini', 'Other names': 'Eswatini', 'ISO 3166-1 alpha-3 CODE': 'SWZ', 'Population': '1181191', 'Continent': 'Africa', 'Total Cases': '69851', 'Total Deaths': '1394', 'Tot\xa0Cases//1M pop': '59136', 'Tot\xa0Deaths/1M pop': '1180', 'Death percentage': '1.995676511'}
{'Country': 'Ethiopia', 'Other names': 'Ethiopia', 'ISO 3166-1 alpha-3 CODE': 'ETH', 'Population': '119945147', 'Continent': 'Africa', 'Total Cases': '469819', 'Total Deaths': '7504', 'Tot\xa0Cases//1M pop': '3917', 'Tot\xa0Deaths/1M pop': '63', 'Death percentage': '1.597210841'}
{'Country': 'Faeroe Islands', 'Other names': 'Faeroe Islands', 'ISO 3166-1 alpha-3 CODE': 'FRO', 'Population': '49188', 'Continent': 'Europe', 'Total Cases': '34237', 'Total Deaths': '28', 'Tot\xa0Cases//1M pop': '696044', 'Tot\xa0Deaths/1M pop': '569', 'Death percentage': '0.081782866'}
{'Country': 'Falkland Islands', 'Other names': 'Falkland Islands (Malvinas)', 'ISO 3166-1 alpha-3 CODE': 'FLK', 'Population': '3657', 'Continent': 'Latin America and the Caribbean', 'Total Cases': '123', 'Total Deaths': '0', 'Tot\xa0Cases//1M pop': '33634', 'Tot\xa0Deaths/1M pop': '0', 'Death percentage': '0'}
{'Country': 'Fiji', 'Other names': 'Fiji', 'ISO 3166-1 alpha-3 CODE': 'FJI', 'Population': '907817', 'Continent': 'Oceania', 'Total Cases': '64422', 'Total Deaths': '834', 'Tot\xa0Cases//1M pop': '70964', 'Tot\xa0Deaths/1M pop': '919', 'Death percentage': '1.294588805'}
{'Country': 'Finland', 'Other names': 'Finland', 'ISO 3166-1 alpha-3 CODE': 'FIN', 'Population': '5555788', 'Continent': 'Europe', 'Total Cases': '889626', 'Total Deaths': '3178', 'Tot\xa0Cases//1M pop': '160126', 'Tot\xa0Deaths/1M pop': '572', 'Death percentage': '0.357228768'}
{'Country': 'France', 'Other names': 'France', 'ISO 3166-1 alpha-3 CODE': 'FRA', 'Population': '65526369', 'Continent': 'Europe', 'Total Cases': '25997852', 'Total Deaths': '142506', 'Tot\xa0Cases//1M pop': '396754', 'Tot\xa0Deaths/1M pop': '2175', 'Death percentage': '0.548145285'}
{'Country': 'French Guiana', 'Other names': 'French Guiana', 'ISO 3166-1 alpha-3 CODE': 'GUF', 'Population': '312224', 'Continent': 'Latin America and the Caribbean', 'Total Cases': '79075', 'Total Deaths': '394', 'Tot\xa0Cases//1M pop': '253264', 'Tot\xa0Deaths/1M pop': '1262', 'Death percentage': '0.498261144'}
{'Country': 'French Polynesia', 'Other names': 'French Polynesia', 'ISO 3166-1 alpha-3 CODE': 'PYF', 'Population': '283751', 'Continent': 'Oceania', 'Total Cases': '72318', 'Total Deaths': '646', 'Tot\xa0Cases//1M pop': '254864', 'Tot\xa0Deaths/1M pop': '2277', 'Death percentage': '0.893276916'}
{'Country': 'Gabon', 'Other names': 'Gabon', 'ISO 3166-1 alpha-3 CODE': 'GAB', 'Population': '2317612', 'Continent': 'Africa', 'Total Cases': '47586', 'Total Deaths': '303', 'Tot\xa0Cases//1M pop': '20532', 'Tot\xa0Deaths/1M pop': '131', 'Death percentage': '0.636741899'}
{'Country': 'Gambia', 'Other names': 'Gambia', 'ISO 3166-1 alpha-3 CODE': 'GMB', 'Population': '2535418', 'Continent': 'Africa', 'Total Cases': '11988', 'Total Deaths': '365', 'Tot\xa0Cases//1M pop': '4728', 'Tot\xa0Deaths/1M pop': '144', 'Death percentage': '3.044711378'}
{'Country': 'Georgia', 'Other names': 'Georgia', 'ISO 3166-1 alpha-3 CODE': 'GEO', 'Population': '3975762', 'Continent': 'Asia', 'Total Cases': '1649222', 'Total Deaths': '16756', 'Tot\xa0Cases//1M pop': '414819', 'Tot\xa0Deaths/1M pop': '4215', 'Death percentage': '1.015994208'}
{'Country': 'Germany', 'Other names': 'Germany', 'ISO 3166-1 alpha-3 CODE': 'DEU', 'Population': '84252947', 'Continent': 'Europe', 'Total Cases': '21646375', 'Total Deaths': '130563', 'Tot\xa0Cases//1M pop': '256921', 'Tot\xa0Deaths/1M pop': '1550', 'Death percentage': '0.603163347'}
{'Country': 'Ghana', 'Other names': 'Ghana', 'ISO 3166-1 alpha-3 CODE': 'GHA', 'Population': '32207812', 'Continent': 'Africa', 'Total Cases': '160971', 'Total Deaths': '1445', 'Tot\xa0Cases//1M pop': '4998', 'Tot\xa0Deaths/1M pop': '45', 'Death percentage': '0.897677221'}
{'Country': 'Gibraltar', 'Other names': 'Gibraltar', 'ISO 3166-1 alpha-3 CODE': 'GIB', 'Population': '33673', 'Continent': 'Europe', 'Total Cases': '16979', 'Total Deaths': '101', 'Tot\xa0Cases//1M pop': '504232', 'Tot\xa0Deaths/1M pop': '2999', 'Death percentage': '0.594852465'}
{'Country': 'Greece', 'Other names': 'Greece', 'ISO 3166-1 alpha-3 CODE': 'GRC', 'Population': '10333930', 'Continent': 'Europe', 'Total Cases': '3077711', 'Total Deaths': '27684', 'Tot\xa0Cases//1M pop': '297826', 'Tot\xa0Deaths/1M pop': '2679', 'Death percentage': '0.899499661'}
{'Country': 'Greenland', 'Other names': 'Greenland', 'ISO 3166-1 alpha-3 CODE': 'GRL', 'Population': '56942', 'Continent': 'Northern America', 'Total Cases': '11971', 'Total Deaths': '21', 'Tot\xa0Cases//1M pop': '210231', 'Tot\xa0Deaths/1M pop': '369', 'Death percentage': '0.175423941'}
{'Country': 'Grenada', 'Other names': 'Grenada', 'ISO 3166-1 alpha-3 CODE': 'GRD', 'Population': '113436', 'Continent': 'Latin America and the Caribbean', 'Total Cases': '14024', 'Total Deaths': '218', 'Tot\xa0Cases//1M pop': '123629', 'Tot\xa0Deaths/1M pop': '1922', 'Death percentage': '1.554478038'}
{'Country': 'Guadeloupe', 'Other names': 'Guadeloupe', 'ISO 3166-1 alpha-3 CODE': 'GLP', 'Population': '400244', 'Continent': 'Latin America and the Caribbean', 'Total Cases': '130705', 'Total Deaths': '843', 'Tot\xa0Cases//1M pop': '326563', 'Tot\xa0Deaths/1M pop': '2106', 'Death percentage': '0.64496385'}
{'Country': 'Guatemala', 'Other names': 'Guatemala', 'ISO 3166-1 alpha-3 CODE': 'GTM', 'Population': '18495493', 'Continent': 'Latin America and the Caribbean', 'Total Cases': '830745', 'Total Deaths': '17325', 'Tot\xa0Cases//1M pop': '44916', 'Tot\xa0Deaths/1M pop': '937', 'Death percentage': '2.085477493'}
{'Country': 'Guinea', 'Other names': 'Guinea', 'ISO 3166-1 alpha-3 CODE': 'GIN', 'Population': '13755881', 'Continent': 'Africa', 'Total Cases': '36459', 'Total Deaths': '440', 'Tot\xa0Cases//1M pop': '2650', 'Tot\xa0Deaths/1M pop': '32', 'Death percentage': '1.206835075'}
{'Country': 'Guinea-Bissau', 'Other names': 'Guinea-Bissau', 'ISO 3166-1 alpha-3 CODE': 'GNB', 'Population': '2049374', 'Continent': 'Africa', 'Total Cases': '8151', 'Total Deaths': '170', 'Tot\xa0Cases//1M pop': '3977', 'Tot\xa0Deaths/1M pop': '83', 'Death percentage': '2.085633665'}
{'Country': 'Guyana', 'Other names': 'Guyana', 'ISO 3166-1 alpha-3 CODE': 'GUY', 'Population': '793196', 'Continent': 'Latin America and the Caribbean', 'Total Cases': '63272', 'Total Deaths': '1226', 'Tot\xa0Cases//1M pop': '79768', 'Tot\xa0Deaths/1M pop': '1546', 'Death percentage': '1.93766595'}
{'Country': 'Haiti', 'Other names': 'Haiti', 'ISO 3166-1 alpha-3 CODE': 'HTI', 'Population': '11645833', 'Continent': 'Latin America and the Caribbean', 'Total Cases': '30549', 'Total Deaths': '833', 'Tot\xa0Cases//1M pop': '2623', 'Tot\xa0Deaths/1M pop': '72', 'Death percentage': '2.726766834'}
{'Country': 'Honduras', 'Other names': 'Honduras', 'ISO 3166-1 alpha-3 CODE': 'HND', 'Population': '10180299', 'Continent': 'Latin America and the Caribbean', 'Total Cases': '421062', 'Total Deaths': '10880', 'Tot\xa0Cases//1M pop': '41360', 'Tot\xa0Deaths/1M pop': '1069', 'Death percentage': '2.583942507'}
{'Country': 'Hong Kong', 'Other names': 'China, Hong Kong Special Administrative Region', 'ISO 3166-1 alpha-3 CODE': 'HKG', 'Population': '7603455', 'Continent': 'Asia', 'Total Cases': '1171422', 'Total Deaths': '8172', 'Tot\xa0Cases//1M pop': '154064', 'Tot\xa0Deaths/1M pop': '1075', 'Death percentage': '0.69761367'}
{'Country': 'Hungary', 'Other names': 'Hungary', 'ISO 3166-1 alpha-3 CODE': 'HUN', 'Population': '9617409', 'Continent': 'Europe', 'Total Cases': '1854198', 'Total Deaths': '45510', 'Tot\xa0Cases//1M pop': '192796', 'Tot\xa0Deaths/1M pop': '4732', 'Death percentage': '2.454430433'}
{'Country': 'Iceland', 'Other names': 'Iceland', 'ISO 3166-1 alpha-3 CODE': 'ISL', 'Population': '345120', 'Continent': 'Europe', 'Total Cases': '181830', 'Total Deaths': '101', 'Tot\xa0Cases//1M pop': '526860', 'Tot\xa0Deaths/1M pop': '293', 'Death percentage': '0.055546389'}
{'Country': 'India', 'Other names': 'India', 'ISO 3166-1 alpha-3 CODE': 'IND', 'Population': '1403754381', 'Continent': 'Asia', 'Total Cases': '43029044', 'Total Deaths': '521388', 'Tot\xa0Cases//1M pop': '30653', 'Tot\xa0Deaths/1M pop': '371', 'Death percentage': '1.211711792'}
{'Country': 'Indonesia', 'Other names': 'Indonesia', 'ISO 3166-1 alpha-3 CODE': 'IDN', 'Population': '278586508', 'Continent': 'Asia', 'Total Cases': '6019981', 'Total Deaths': '155288', 'Tot\xa0Cases//1M pop': '21609', 'Tot\xa0Deaths/1M pop': '557', 'Death percentage': '2.579543025'}
{'Country': 'Iran', 'Other names': 'United Kingdom', 'ISO 3166-1 alpha-3 CODE': 'IRN', 'Population': '85874667', 'Continent': 'Asia', 'Total Cases': '7167646', 'Total Deaths': '140315', 'Tot\xa0Cases//1M pop': '83466', 'Tot\xa0Deaths/1M pop': '1634', 'Death percentage': '1.95761621'}
{'Country': 'Iraq', 'Other names': 'Iraq', 'ISO 3166-1 alpha-3 CODE': 'IRQ', 'Population': '41801625', 'Continent': 'Asia', 'Total Cases': '2320260', 'Total Deaths': '25173', 'Tot\xa0Cases//1M pop': '55506', 'Tot\xa0Deaths/1M pop': '602', 'Death percentage': '1.084921517'}
{'Country': 'Ireland', 'Other names': 'Ireland', 'ISO 3166-1 alpha-3 CODE': 'IRL', 'Population': '5034333', 'Continent': 'Europe', 'Total Cases': '1471210', 'Total Deaths': '6786', 'Tot\xa0Cases//1M pop': '292235', 'Tot\xa0Deaths/1M pop': '1348', 'Death percentage': '0.461252982'}
{'Country': 'Isle of Man', 'Other names': 'Isle of Man', 'ISO 3166-1 alpha-3 CODE': 'IMN', 'Population': '85821', 'Continent': 'Europe', 'Total Cases': '28416', 'Total Deaths': '84', 'Tot\xa0Cases//1M pop': '331108', 'Tot\xa0Deaths/1M pop': '979', 'Death percentage': '0.295608108'}
{'Country': 'Israel', 'Other names': 'Israel', 'ISO 3166-1 alpha-3 CODE': 'ISR', 'Population': '9326000', 'Continent': 'Asia', 'Total Cases': '3943153', 'Total Deaths': '10530', 'Tot\xa0Cases//1M pop': '422813', 'Tot\xa0Deaths/1M pop': '1129', 'Death percentage': '0.267045179'}
{'Country': 'Italy', 'Other names': 'Italy', 'ISO 3166-1 alpha-3 CODE': 'ITA', 'Population': '60306185', 'Continent': 'Europe', 'Total Cases': '14846514', 'Total Deaths': '159784', 'Tot\xa0Cases//1M pop': '246186', 'Tot\xa0Deaths/1M pop': '2650', 'Death percentage': '1.076239176'}
{'Country': 'Ivory Coast', 'Other names': "Côte d'Ivoire", 'ISO 3166-1 alpha-3 CODE': 'CIV', 'Population': '27520953', 'Continent': 'Africa', 'Total Cases': '81761', 'Total Deaths': '796', 'Tot\xa0Cases//1M pop': '2971', 'Tot\xa0Deaths/1M pop': '29', 'Death percentage': '0.973569306'}
{'Country': 'Jamaica', 'Other names': 'Jamaica', 'ISO 3166-1 alpha-3 CODE': 'JAM', 'Population': '2983794', 'Continent': 'Latin America and the Caribbean', 'Total Cases': '128811', 'Total Deaths': '2893', 'Tot\xa0Cases//1M pop': '43170', 'Tot\xa0Deaths/1M pop': '970', 'Death percentage': '2.245926202'}
{'Country': 'Japan', 'Other names': 'Japan', 'ISO 3166-1 alpha-3 CODE': 'JPN', 'Population': '125798669', 'Continent': 'Asia', 'Total Cases': '6653841', 'Total Deaths': '28248', 'Tot\xa0Cases//1M pop': '52893', 'Tot\xa0Deaths/1M pop': '225', 'Death percentage': '0.424536745'}
{'Country': 'Jordan', 'Other names': 'Jordan', 'ISO 3166-1 alpha-3 CODE': 'JOR', 'Population': '10380442', 'Continent': 'Asia', 'Total Cases': '1689314', 'Total Deaths': '14003', 'Tot\xa0Cases//1M pop': '162740', 'Tot\xa0Deaths/1M pop': '1349', 'Death percentage': '0.828916353'}
{'Country': 'Kazakhstan', 'Other names': 'Kazakhstan', 'ISO 3166-1 alpha-3 CODE': 'KAZ', 'Population': '19169833', 'Continent': 'Asia', 'Total Cases': '1305188', 'Total Deaths': '13660', 'Tot\xa0Cases//1M pop': '68086', 'Tot\xa0Deaths/1M pop': '713', 'Death percentage': '1.046592522'}
{'Country': 'Kenya', 'Other names': 'Kenya', 'ISO 3166-1 alpha-3 CODE': 'KEN', 'Population': '55843563', 'Continent': 'Africa', 'Total Cases': '323454', 'Total Deaths': '5648', 'Tot\xa0Cases//1M pop': '5792', 'Tot\xa0Deaths/1M pop': '101', 'Death percentage': '1.746152467'}
{'Country': 'Kiribati', 'Other names': 'Kiribati', 'ISO 3166-1 alpha-3 CODE': 'KIR', 'Population': '122656', 'Continent': 'Oceania', 'Total Cases': '3067', 'Total Deaths': '13', 'Tot\xa0Cases//1M pop': '25005', 'Tot\xa0Deaths/1M pop': '106', 'Death percentage': '0.423866971'}
{'Country': 'Kuwait', 'Other names': 'Kuwait', 'ISO 3166-1 alpha-3 CODE': 'KWT', 'Population': '4381108', 'Continent': 'Asia', 'Total Cases': '629525', 'Total Deaths': '2554', 'Tot\xa0Cases//1M pop': '143691', 'Tot\xa0Deaths/1M pop': '583', 'Death percentage': '0.405702712'}
{'Country': 'Kyrgyzstan', 'Other names': 'Kyrgyzstan', 'ISO 3166-1 alpha-3 CODE': 'KGZ', 'Population': '6712569', 'Continent': 'Asia', 'Total Cases': '200968', 'Total Deaths': '2991', 'Tot\xa0Cases//1M pop': '29939', 'Tot\xa0Deaths/1M pop': '446', 'Death percentage': '1.488296644'}
{'Country': 'Laos', 'Other names': "Lao People's Democratic Republic", 'ISO 3166-1 alpha-3 CODE': 'LAO', 'Population': '7460338', 'Continent': 'Asia', 'Total Cases': '183560', 'Total Deaths': '679', 'Tot\xa0Cases//1M pop': '24605', 'Tot\xa0Deaths/1M pop': '91', 'Death percentage': '0.369906298'}
{'Country': 'Latvia', 'Other names': 'Latvia', 'ISO 3166-1 alpha-3 CODE': 'LVA', 'Population': '1849698', 'Continent': 'Europe', 'Total Cases': '802534', 'Total Deaths': '5643', 'Tot\xa0Cases//1M pop': '433873', 'Tot\xa0Deaths/1M pop': '3051', 'Death percentage': '0.703147779'}
{'Country': 'Lebanon', 'Other names': 'Lebanon', 'ISO 3166-1 alpha-3 CODE': 'LBN', 'Population': '6771939', 'Continent': 'Asia', 'Total Cases': '1092995', 'Total Deaths': '10315', 'Tot\xa0Cases//1M pop': '161401', 'Tot\xa0Deaths/1M pop': '1523', 'Death percentage': '0.943737163'}
{'Country': 'Lesotho', 'Other names': 'Lesotho', 'ISO 3166-1 alpha-3 CODE': 'LSO', 'Population': '2171978', 'Continent': 'Africa', 'Total Cases': '32910', 'Total Deaths': '697', 'Tot\xa0Cases//1M pop': '15152', 'Tot\xa0Deaths/1M pop': '321', 'Death percentage': '2.117897296'}
{'Country': 'Liberia', 'Other names': 'Liberia', 'ISO 3166-1 alpha-3 CODE': 'LBR', 'Population': '5265647', 'Continent': 'Africa', 'Total Cases': '7400', 'Total Deaths': '294', 'Tot\xa0Cases//1M pop': '1405', 'Tot\xa0Deaths/1M pop': '56', 'Death percentage': '3.972972973'}
{'Country': 'Libya', 'Other names': 'Libya', 'ISO 3166-1 alpha-3 CODE': 'LBY', 'Population': '7034832', 'Continent': 'Africa', 'Total Cases': '501738', 'Total Deaths': '6419', 'Tot\xa0Cases//1M pop': '71322', 'Tot\xa0Deaths/1M pop': '912', 'Death percentage': '1.279352969'}
{'Country': 'Liechtenstein', 'Other names': 'Liechtenstein', 'ISO 3166-1 alpha-3 CODE': 'LIE', 'Population': '38320', 'Continent': 'Europe', 'Total Cases': '16429', 'Total Deaths': '84', 'Tot\xa0Cases//1M pop': '428732', 'Tot\xa0Deaths/1M pop': '2192', 'Death percentage': '0.51129101'}
{'Country': 'Lithuania', 'Other names': 'Lithuania', 'ISO 3166-1 alpha-3 CODE': 'LTU', 'Population': '2655811', 'Continent': 'Europe', 'Total Cases': '1030966', 'Total Deaths': '8907', 'Tot\xa0Cases//1M pop': '388193', 'Tot\xa0Deaths/1M pop': '3354', 'Death percentage': '0.863947017'}
{'Country': 'Luxembourg', 'Other names': 'Luxembourg', 'ISO 3166-1 alpha-3 CODE': 'LUX', 'Population': '643801', 'Continent': 'Europe', 'Total Cases': '216979', 'Total Deaths': '1037', 'Tot\xa0Cases//1M pop': '337028', 'Tot\xa0Deaths/1M pop': '1611', 'Death percentage': '0.477926435'}
{'Country': 'Macao', 'Other names': 'China, Macao Special Administrative Region', 'ISO 3166-1 alpha-3 CODE': 'MAC', 'Population': '664828', 'Continent': 'Asia', 'Total Cases': '82', 'Total Deaths': '0', 'Tot\xa0Cases//1M pop': '123', 'Tot\xa0Deaths/1M pop': '0', 'Death percentage': '0'}
{'Country': 'Madagascar', 'Other names': 'Madagascar', 'ISO 3166-1 alpha-3 CODE': 'MDG', 'Population': '28936285', 'Continent': 'Africa', 'Total Cases': '64050', 'Total Deaths': '1388', 'Tot\xa0Cases//1M pop': '2213', 'Tot\xa0Deaths/1M pop': '48', 'Death percentage': '2.167056987'}
{'Country': 'Malawi', 'Other names': 'Malawi', 'ISO 3166-1 alpha-3 CODE': 'MWI', 'Population': '19994654', 'Continent': 'Africa', 'Total Cases': '85664', 'Total Deaths': '2626', 'Tot\xa0Cases//1M pop': '4284', 'Tot\xa0Deaths/1M pop': '131', 'Death percentage': '3.065465073'}
{'Country': 'Malaysia', 'Other names': 'Malaysia', 'ISO 3166-1 alpha-3 CODE': 'MYS', 'Population': '33091831', 'Continent': 'Asia', 'Total Cases': '4246467', 'Total Deaths': '35099', 'Tot\xa0Cases//1M pop': '128324', 'Tot\xa0Deaths/1M pop': '1061', 'Death percentage': '0.826545926'}
{'Country': 'Maldives', 'Other names': 'Maldives', 'ISO 3166-1 alpha-3 CODE': 'MDV', 'Population': '557204', 'Continent': 'Asia', 'Total Cases': '176993', 'Total Deaths': '298', 'Tot\xa0Cases//1M pop': '317645', 'Tot\xa0Deaths/1M pop': '535', 'Death percentage': '0.168368241'}
{'Country': 'Mali', 'Other names': 'Mali', 'ISO 3166-1 alpha-3 CODE': 'MLI', 'Population': '21271006', 'Continent': 'Africa', 'Total Cases': '30495', 'Total Deaths': '728', 'Tot\xa0Cases//1M pop': '1434', 'Tot\xa0Deaths/1M pop': '34', 'Death percentage': '2.387276603'}
{'Country': 'Malta', 'Other names': 'Malta', 'ISO 3166-1 alpha-3 CODE': 'MLT', 'Population': '443602', 'Continent': 'Europe', 'Total Cases': '81596', 'Total Deaths': '641', 'Tot\xa0Cases//1M pop': '183940', 'Tot\xa0Deaths/1M pop': '1445', 'Death percentage': '0.785577724'}
{'Country': 'Marshall Islands', 'Other names': 'Marshall Islands', 'ISO 3166-1 alpha-3 CODE': 'MHL', 'Population': '59889', 'Continent': 'Oceania', 'Total Cases': '7', 'Total Deaths': '0', 'Tot\xa0Cases//1M pop': '117', 'Tot\xa0Deaths/1M pop': '0', 'Death percentage': '0'}
{'Country': 'Martinique', 'Other names': 'Martinique', 'ISO 3166-1 alpha-3 CODE': 'MTQ', 'Population': '374756', 'Continent': 'Latin America and the Caribbean', 'Total Cases': '141415', 'Total Deaths': '909', 'Tot\xa0Cases//1M pop': '377352', 'Tot\xa0Deaths/1M pop': '2426', 'Death percentage': '0.642788954'}
{'Country': 'Mauritania', 'Other names': 'Mauritania', 'ISO 3166-1 alpha-3 CODE': 'MRT', 'Population': '4863443', 'Continent': 'Africa', 'Total Cases': '58670', 'Total Deaths': '982', 'Tot\xa0Cases//1M pop': '12063', 'Tot\xa0Deaths/1M pop': '202', 'Death percentage': '1.673768536'}
{'Country': 'Mauritius', 'Other names': 'Mauritius', 'ISO 3166-1 alpha-3 CODE': 'MUS', 'Population': '1275463', 'Continent': 'Africa', 'Total Cases': '36628', 'Total Deaths': '968', 'Tot\xa0Cases//1M pop': '28717', 'Tot\xa0Deaths/1M pop': '759', 'Death percentage': '2.642786939'}
{'Country': 'Mayotte', 'Other names': 'Mayotte', 'ISO 3166-1 alpha-3 CODE': 'MYTÂ\xa0', 'Population': '284330', 'Continent': 'Africa', 'Total Cases': '36891', 'Total Deaths': '187', 'Tot\xa0Cases//1M pop': '129747', 'Tot\xa0Deaths/1M pop': '658', 'Death percentage': '0.506898702'}
{'Country': 'Mexico', 'Other names': 'Mexico', 'ISO 3166-1 alpha-3 CODE': 'MEX', 'Population': '131303955', 'Continent': 'Latin America and the Caribbean', 'Total Cases': '5665376', 'Total Deaths': '323212', 'Tot\xa0Cases//1M pop': '43147', 'Tot\xa0Deaths/1M pop': '2462', 'Death percentage': '5.705040583'}
{'Country': 'Micronesia', 'Other names': 'Micronesia (Federated States of)', 'ISO 3166-1 alpha-3 CODE': 'FSM', 'Population': '117134', 'Continent': 'Oceania', 'Total Cases': '1', 'Total Deaths': '0', 'Tot\xa0Cases//1M pop': '9', 'Tot\xa0Deaths/1M pop': '0', 'Death percentage': '0'}
{'Country': 'Moldova', 'Other names': 'Republic of Moldova', 'ISO 3166-1 alpha-3 CODE': 'MDA', 'Population': '4017550', 'Continent': 'Europe', 'Total Cases': '514199', 'Total Deaths': '11446', 'Tot\xa0Cases//1M pop': '127988', 'Tot\xa0Deaths/1M pop': '2849', 'Death percentage': '2.225986437'}
{'Country': 'Monaco', 'Other names': 'Monaco', 'ISO 3166-1 alpha-3 CODE': 'MCO', 'Population': '39729', 'Continent': 'Europe', 'Total Cases': '10842', 'Total Deaths': '54', 'Tot\xa0Cases//1M pop': '272899', 'Tot\xa0Deaths/1M pop': '1359', 'Death percentage': '0.498063088'}
{'Country': 'Mongolia', 'Other names': 'Mongolia', 'ISO 3166-1 alpha-3 CODE': 'MNG', 'Population': '3370682', 'Continent': 'Asia', 'Total Cases': '468610', 'Total Deaths': '2177', 'Tot\xa0Cases//1M pop': '139025', 'Tot\xa0Deaths/1M pop': '646', 'Death percentage': '0.464565417'}
{'Country': 'Montenegro', 'Other names': '', 'ISO 3166-1 alpha-3 CODE': 'MNE', 'Population': '628205', 'Continent': 'Europe', 'Total Cases': '233326', 'Total Deaths': '2705', 'Tot\xa0Cases//1M pop': '371417', 'Tot\xa0Deaths/1M pop': '4306', 'Death percentage': '1.15932215'}
{'Country': 'Montserrat', 'Other names': 'Montserrat', 'ISO 3166-1 alpha-3 CODE': 'MSR', 'Population': '4997', 'Continent': 'Latin America and the Caribbean', 'Total Cases': '175', 'Total Deaths': '2', 'Tot\xa0Cases//1M pop': '35021', 'Tot\xa0Deaths/1M pop': '400', 'Death percentage': '1.142857143'}
{'Country': 'Morocco', 'Other names': 'Morocco', 'ISO 3166-1 alpha-3 CODE': 'MAR', 'Population': '37676342', 'Continent': 'Africa', 'Total Cases': '1163526', 'Total Deaths': '16060', 'Tot\xa0Cases//1M pop': '30882', 'Tot\xa0Deaths/1M pop': '426', 'Death percentage': '1.380287162'}
{'Country': 'Mozambique', 'Other names': 'Mozambique', 'ISO 3166-1 alpha-3 CODE': 'MOZ', 'Population': '32787052', 'Continent': 'Africa', 'Total Cases': '225266', 'Total Deaths': '2200', 'Tot\xa0Cases//1M pop': '6871', 'Tot\xa0Deaths/1M pop': '67', 'Death percentage': '0.976623192'}
{'Country': 'Myanmar', 'Other names': 'Myanmar', 'ISO 3166-1 alpha-3 CODE': 'MMR', 'Population': '55048340', 'Continent': 'Asia', 'Total Cases': '611875', 'Total Deaths': '19433', 'Tot\xa0Cases//1M pop': '11115', 'Tot\xa0Deaths/1M pop': '353', 'Death percentage': '3.175975485'}
{'Country': 'Namibia', 'Other names': 'Namibia', 'ISO 3166-1 alpha-3 CODE': 'NAM', 'Population': '2621429', 'Continent': 'Africa', 'Total Cases': '157646', 'Total Deaths': '4019', 'Tot\xa0Cases//1M pop': '60137', 'Tot\xa0Deaths/1M pop': '1533', 'Death percentage': '2.549382794'}
{'Country': 'Nepal', 'Other names': 'Nepal', 'ISO 3166-1 alpha-3 CODE': 'NPL', 'Population': '30053867', 'Continent': 'Asia', 'Total Cases': '978475', 'Total Deaths': '11951', 'Tot\xa0Cases//1M pop': '32557', 'Tot\xa0Deaths/1M pop': '398', 'Death percentage': '1.221390429'}
{'Country': 'Netherlands', 'Other names': 'Netherlands', 'ISO 3166-1 alpha-3 CODE': 'NLD', 'Population': '17201245', 'Continent': 'Europe', 'Total Cases': '7908701', 'Total Deaths': '22016', 'Tot\xa0Cases//1M pop': '459775', 'Tot\xa0Deaths/1M pop': '1280', 'Death percentage': '0.278376942'}
{'Country': 'New Caledonia', 'Other names': 'New Caledonia', 'ISO 3166-1 alpha-3 CODE': 'NCL', 'Population': '290302', 'Continent': 'Oceania', 'Total Cases': '60294', 'Total Deaths': '311', 'Tot\xa0Cases//1M pop': '207694', 'Tot\xa0Deaths/1M pop': '1071', 'Death percentage': '0.515805884'}
{'Country': 'New Zealand', 'Other names': 'New Zealand', 'ISO 3166-1 alpha-3 CODE': 'NZL', 'Population': '5002100', 'Continent': 'Oceania', 'Total Cases': '693219', 'Total Deaths': '350', 'Tot\xa0Cases//1M pop': '138586', 'Tot\xa0Deaths/1M pop': '70', 'Death percentage': '0.050489095'}
{'Country': 'Nicaragua', 'Other names': 'Nicaragua', 'ISO 3166-1 alpha-3 CODE': 'NIC', 'Population': '6762511', 'Continent': 'Latin America and the Caribbean', 'Total Cases': '18434', 'Total Deaths': '224', 'Tot\xa0Cases//1M pop': '2726', 'Tot\xa0Deaths/1M pop': '33', 'Death percentage': '1.215145926'}
{'Country': 'Niger', 'Other names': 'Niger', 'ISO 3166-1 alpha-3 CODE': 'NER', 'Population': '25738714', 'Continent': 'Africa', 'Total Cases': '8811', 'Total Deaths': '308', 'Tot\xa0Cases//1M pop': '342', 'Tot\xa0Deaths/1M pop': '12', 'Death percentage': '3.495630462'}
{'Country': 'Nigeria', 'Other names': 'Nigeria', 'ISO 3166-1 alpha-3 CODE': 'NGA', 'Population': '215077352', 'Continent': 'Africa', 'Total Cases': '255468', 'Total Deaths': '3142', 'Tot\xa0Cases//1M pop': '1188', 'Tot\xa0Deaths/1M pop': '15', 'Death percentage': '1.229899635'}
{'Country': 'Niue', 'Other names': 'Niue', 'ISO 3166-1 alpha-3 CODE': 'NIU', 'Population': '1645', 'Continent': 'Oceania', 'Total Cases': '7', 'Total Deaths': '0', 'Tot\xa0Cases//1M pop': '4255', 'Tot\xa0Deaths/1M pop': '0', 'Death percentage': '0'}
{'Country': 'North Macedonia', 'Other names': 'The former Yugoslav Republic of Macedonia', 'ISO 3166-1 alpha-3 CODE': 'MKD', 'Population': '2083224', 'Continent': 'Europe', 'Total Cases': '306670', 'Total Deaths': '9228', 'Tot\xa0Cases//1M pop': '147209', 'Tot\xa0Deaths/1M pop': '4430', 'Death percentage': '3.009097727'}
{'Country': 'Norway', 'Other names': 'Norway', 'ISO 3166-1 alpha-3 CODE': 'NOR', 'Population': '5495449', 'Continent': 'Europe', 'Total Cases': '1408708', 'Total Deaths': '2518', 'Tot\xa0Cases//1M pop': '256341', 'Tot\xa0Deaths/1M pop': '458', 'Death percentage': '0.178745347'}
{'Country': 'Oman', 'Other names': 'Oman', 'ISO 3166-1 alpha-3 CODE': 'OMN', 'Population': '5333815', 'Continent': 'Asia', 'Total Cases': '388468', 'Total Deaths': '4251', 'Tot\xa0Cases//1M pop': '72831', 'Tot\xa0Deaths/1M pop': '797', 'Death percentage': '1.094298629'}
{'Country': 'Pakistan', 'Other names': 'Pakistan', 'ISO 3166-1 alpha-3 CODE': 'PAK', 'Population': '228397520', 'Continent': 'Asia', 'Total Cases': '1525466', 'Total Deaths': '30361', 'Tot\xa0Cases//1M pop': '6679', 'Tot\xa0Deaths/1M pop': '133', 'Death percentage': '1.990277069'}
{'Country': 'Palau', 'Other names': 'Palau', 'ISO 3166-1 alpha-3 CODE': 'PLW', 'Population': '18245', 'Continent': 'Oceania', 'Total Cases': '4042', 'Total Deaths': '6', 'Tot\xa0Cases//1M pop': '221540', 'Tot\xa0Deaths/1M pop': '329', 'Death percentage': '0.148441366'}
{'Country': 'Palestine', 'Other names': 'State of Palestine', 'ISO 3166-1 alpha-3 CODE': 'WBG', 'Population': '5308883', 'Continent': 'Asia', 'Total Cases': '581236', 'Total Deaths': '5351', 'Tot\xa0Cases//1M pop': '109484', 'Tot\xa0Deaths/1M pop': '1008', 'Death percentage': '0.920624325'}
{'Country': 'Panama', 'Other names': 'Panama', 'ISO 3166-1 alpha-3 CODE': 'PAN', 'Population': '4433639', 'Continent': 'Latin America and the Caribbean', 'Total Cases': '765213', 'Total Deaths': '8170', 'Tot\xa0Cases//1M pop': '172593', 'Tot\xa0Deaths/1M pop': '1843', 'Death percentage': '1.067676582'}
{'Country': 'Papua New Guinea', 'Other names': 'Papua New Guinea', 'ISO 3166-1 alpha-3 CODE': 'PNG', 'Population': '9243590', 'Continent': 'Oceania', 'Total Cases': '42203', 'Total Deaths': '640', 'Tot\xa0Cases//1M pop': '4566', 'Tot\xa0Deaths/1M pop': '69', 'Death percentage': '1.516479871'}
{'Country': 'Paraguay', 'Other names': 'Paraguay', 'ISO 3166-1 alpha-3 CODE': 'PRY', 'Population': '7285892', 'Continent': 'Latin America and the Caribbean', 'Total Cases': '648353', 'Total Deaths': '18731', 'Tot\xa0Cases//1M pop': '88987', 'Tot\xa0Deaths/1M pop': '2571', 'Death percentage': '2.889012621'}
{'Country': 'Peru', 'Other names': 'Peru', 'ISO 3166-1 alpha-3 CODE': 'PER', 'Population': '33775745', 'Continent': 'Latin America and the Caribbean', 'Total Cases': '3548559', 'Total Deaths': '212328', 'Tot\xa0Cases//1M pop': '105062', 'Tot\xa0Deaths/1M pop': '6286', 'Death percentage': '5.983499218'}
{'Country': 'Philippines', 'Other names': 'Philippines', 'ISO 3166-1 alpha-3 CODE': 'PHL', 'Population': '112133868', 'Continent': 'Asia', 'Total Cases': '3679485', 'Total Deaths': '59343', 'Tot\xa0Cases//1M pop': '32813', 'Tot\xa0Deaths/1M pop': '529', 'Death percentage': '1.612807227'}
{'Country': 'Poland', 'Other names': 'Poland', 'ISO 3166-1 alpha-3 CODE': 'POL', 'Population': '37774045', 'Continent': 'Europe', 'Total Cases': '5969621', 'Total Deaths': '115345', 'Tot\xa0Cases//1M pop': '158035', 'Tot\xa0Deaths/1M pop': '3054', 'Death percentage': '1.932199716'}
{'Country': 'Portugal', 'Other names': 'Portugal', 'ISO 3166-1 alpha-3 CODE': 'PRT', 'Population': '10144662', 'Continent': 'Europe', 'Total Cases': '3604114', 'Total Deaths': '21693', 'Tot\xa0Cases//1M pop': '355272', 'Tot\xa0Deaths/1M pop': '2138', 'Death percentage': '0.601895501'}
{'Country': 'Qatar', 'Other names': 'Qatar', 'ISO 3166-1 alpha-3 CODE': 'QAT', 'Population': '2807805', 'Continent': 'Asia', 'Total Cases': '361819', 'Total Deaths': '677', 'Tot\xa0Cases//1M pop': '128862', 'Tot\xa0Deaths/1M pop': '241', 'Death percentage': '0.18711013'}
{'Country': 'Réunion', 'Other names': 'Réunion', 'ISO 3166-1 alpha-3 CODE': 'REU', 'Population': '906497', 'Continent': 'Africa', 'Total Cases': '336945', 'Total Deaths': '709', 'Tot\xa0Cases//1M pop': '371700', 'Tot\xa0Deaths/1M pop': '782', 'Death percentage': '0.210420098'}
{'Country': 'Romania', 'Other names': 'Romania', 'ISO 3166-1 alpha-3 CODE': 'ROU', 'Population': '19013049', 'Continent': 'Europe', 'Total Cases': '2860094', 'Total Deaths': '65090', 'Tot\xa0Cases//1M pop': '150428', 'Tot\xa0Deaths/1M pop': '3423', 'Death percentage': '2.275799327'}
{'Country': 'Russia', 'Other names': 'Russian Federation', 'ISO 3166-1 alpha-3 CODE': 'RUS', 'Population': '146044010', 'Continent': 'Europe', 'Total Cases': '17896866', 'Total Deaths': '369708', 'Tot\xa0Cases//1M pop': '122544', 'Tot\xa0Deaths/1M pop': '2531', 'Death percentage': '2.065769504'}
{'Country': 'Rwanda', 'Other names': 'Rwanda', 'ISO 3166-1 alpha-3 CODE': 'RWA', 'Population': '13513881', 'Continent': 'Africa', 'Total Cases': '129728', 'Total Deaths': '1458', 'Tot\xa0Cases//1M pop': '9600', 'Tot\xa0Deaths/1M pop': '108', 'Death percentage': '1.123889985'}
{'Country': 'S. Korea', 'Other names': 'Republic of Korea', 'ISO 3166-1 alpha-3 CODE': 'KOR', 'Population': '51346429', 'Continent': 'Asia', 'Total Cases': '13874216', 'Total Deaths': '17235', 'Tot\xa0Cases//1M pop': '270208', 'Tot\xa0Deaths/1M pop': '336', 'Death percentage': '0.124223235'}
{'Country': 'Saint Helena', 'Other names': 'Saint Helena', 'ISO 3166-1 alpha-3 CODE': 'SHN', 'Population': '6109', 'Continent': 'Africa', 'Total Cases': '2', 'Total Deaths': '0', 'Tot\xa0Cases//1M pop': '327', 'Tot\xa0Deaths/1M pop': '0', 'Death percentage': '0'}
{'Country': 'Saint Kitts and Nevis', 'Other names': 'Saint Kitts and Nevis', 'ISO 3166-1 alpha-3 CODE': 'KNA', 'Population': '53858', 'Continent': 'Latin America and the Caribbean', 'Total Cases': '5549', 'Total Deaths': '43', 'Tot\xa0Cases//1M pop': '103030', 'Tot\xa0Deaths/1M pop': '798', 'Death percentage': '0.774914399'}
{'Country': 'Saint Lucia', 'Other names': 'Saint Lucia', 'ISO 3166-1 alpha-3 CODE': 'LCA', 'Population': '185096', 'Continent': 'Latin America and the Caribbean', 'Total Cases': '22964', 'Total Deaths': '365', 'Tot\xa0Cases//1M pop': '124065', 'Tot\xa0Deaths/1M pop': '1972', 'Death percentage': '1.589444348'}
{'Country': 'Saint Martin', 'Other names': 'Saint Martin', 'ISO 3166-1 alpha-3 CODE': 'MAF', 'Population': '39820', 'Continent': 'Latin America and the Caribbean', 'Total Cases': '10107', 'Total Deaths': '63', 'Tot\xa0Cases//1M pop': '253817', 'Tot\xa0Deaths/1M pop': '1582', 'Death percentage': '0.623330365'}
{'Country': 'Saint Pierre Miquelon', 'Other names': '\xa0Saint Pierre and Miquelon', 'ISO 3166-1 alpha-3 CODE': 'SPM', 'Population': '5744', 'Continent': 'Northern America', 'Total Cases': '1957', 'Total Deaths': '1', 'Tot\xa0Cases//1M pop': '340703', 'Tot\xa0Deaths/1M pop': '174', 'Death percentage': '0.05109862'}
{'Country': 'Samoa', 'Other names': 'Samoa', 'ISO 3166-1 alpha-3 CODE': 'WSM', 'Population': '200722', 'Continent': 'Oceania', 'Total Cases': '2285', 'Total Deaths': '1', 'Tot\xa0Cases//1M pop': '11384', 'Tot\xa0Deaths/1M pop': '5', 'Death percentage': '0.043763676'}
{'Country': 'San Marino', 'Other names': 'San Marino', 'ISO 3166-1 alpha-3 CODE': 'SMR', 'Population': '34056', 'Continent': 'Europe', 'Total Cases': '15181', 'Total Deaths': '113', 'Tot\xa0Cases//1M pop': '445766', 'Tot\xa0Deaths/1M pop': '3318', 'Death percentage': '0.744351492'}
{'Country': 'Sao Tome and Principe', 'Other names': 'Sao Tome and Principe', 'ISO 3166-1 alpha-3 CODE': 'STP', 'Population': '226281', 'Continent': 'Africa', 'Total Cases': '5945', 'Total Deaths': '73', 'Tot\xa0Cases//1M pop': '26273', 'Tot\xa0Deaths/1M pop': '323', 'Death percentage': '1.227922624'}
{'Country': 'Saudi Arabia', 'Other names': 'Saudi Arabia', 'ISO 3166-1 alpha-3 CODE': 'SAU', 'Population': '35762746', 'Continent': 'Asia', 'Total Cases': '751076', 'Total Deaths': '9048', 'Tot\xa0Cases//1M pop': '21002', 'Tot\xa0Deaths/1M pop': '253', 'Death percentage': '1.204671698'}
{'Country': 'Senegal', 'Other names': 'Senegal', 'ISO 3166-1 alpha-3 CODE': 'SEN', 'Population': '17515750', 'Continent': 'Africa', 'Total Cases': '85919', 'Total Deaths': '1965', 'Tot\xa0Cases//1M pop': '4905', 'Tot\xa0Deaths/1M pop': '112', 'Death percentage': '2.287037791'}
{'Country': 'Serbia', 'Other names': 'Serbia', 'ISO 3166-1 alpha-3 CODE': 'SRB', 'Population': '8675762', 'Continent': 'Europe', 'Total Cases': '1980722', 'Total Deaths': '15825', 'Tot\xa0Cases//1M pop': '228305', 'Tot\xa0Deaths/1M pop': '1824', 'Death percentage': '0.79895109'}
{'Country': 'Seychelles', 'Other names': 'Seychelles', 'ISO 3166-1 alpha-3 CODE': 'SYC', 'Population': '99413', 'Continent': 'Africa', 'Total Cases': '40421', 'Total Deaths': '164', 'Tot\xa0Cases//1M pop': '406597', 'Tot\xa0Deaths/1M pop': '1650', 'Death percentage': '0.405729695'}
{'Country': 'Sierra Leone', 'Other names': 'Sierra Leone', 'ISO 3166-1 alpha-3 CODE': 'SLE', 'Population': '8260822', 'Continent': 'Africa', 'Total Cases': '7674', 'Total Deaths': '125', 'Tot\xa0Cases//1M pop': '929', 'Tot\xa0Deaths/1M pop': '15', 'Death percentage': '1.628876727'}
{'Country': 'Singapore', 'Other names': 'Singapore', 'ISO 3166-1 alpha-3 CODE': 'SGP', 'Population': '5930887', 'Continent': 'Asia', 'Total Cases': '1109744', 'Total Deaths': '1276', 'Tot\xa0Cases//1M pop': '187113', 'Tot\xa0Deaths/1M pop': '215', 'Death percentage': '0.114981473'}
{'Country': 'Sint Maarten', 'Other names': 'Sint Maarten', 'ISO 3166-1 alpha-3 CODE': 'SXM', 'Population': '43728', 'Continent': 'Latin America and the Caribbean', 'Total Cases': '9766', 'Total Deaths': '86', 'Tot\xa0Cases//1M pop': '223335', 'Tot\xa0Deaths/1M pop': '1967', 'Death percentage': '0.880606185'}
{'Country': 'Slovakia', 'Other names': 'Slovakia', 'ISO 3166-1 alpha-3 CODE': 'SVK', 'Population': '5464272', 'Continent': 'Europe', 'Total Cases': '1725487', 'Total Deaths': '19417', 'Tot\xa0Cases//1M pop': '315776', 'Tot\xa0Deaths/1M pop': '3553', 'Death percentage': '1.125305493'}
{'Country': 'Slovenia', 'Other names': 'Slovenia', 'ISO 3166-1 alpha-3 CODE': 'SVN', 'Population': '2079438', 'Continent': 'Europe', 'Total Cases': '973892', 'Total Deaths': '6501', 'Tot\xa0Cases//1M pop': '468344', 'Tot\xa0Deaths/1M pop': '3126', 'Death percentage': '0.667527816'}
{'Country': 'Solomon Islands', 'Other names': 'Solomon Islands', 'ISO 3166-1 alpha-3 CODE': 'SLB', 'Population': '716351', 'Continent': 'Oceania', 'Total Cases': '11470', 'Total Deaths': '133', 'Tot\xa0Cases//1M pop': '16012', 'Tot\xa0Deaths/1M pop': '186', 'Death percentage': '1.159546643'}
{'Country': 'Somalia', 'Other names': 'Somalia', 'ISO 3166-1 alpha-3 CODE': 'SOM', 'Population': '16668781', 'Continent': 'Africa', 'Total Cases': '26400', 'Total Deaths': '1348', 'Tot\xa0Cases//1M pop': '1584', 'Tot\xa0Deaths/1M pop': '81', 'Death percentage': '5.106060606'}
{'Country': 'South Africa', 'Other names': 'South Africa', 'ISO 3166-1 alpha-3 CODE': 'ZAF', 'Population': '60617532', 'Continent': 'Africa', 'Total Cases': '3722954', 'Total Deaths': '100050', 'Tot\xa0Cases//1M pop': '61417', 'Tot\xa0Deaths/1M pop': '1651', 'Death percentage': '2.687382116'}
{'Country': 'South Sudan', 'Other names': 'South Sudan', 'ISO 3166-1 alpha-3 CODE': 'SSD', 'Population': '11423439', 'Continent': 'Africa', 'Total Cases': '17278', 'Total Deaths': '138', 'Tot\xa0Cases//1M pop': '1513', 'Tot\xa0Deaths/1M pop': '12', 'Death percentage': '0.798703554'}
{'Country': 'Spain', 'Other names': 'Spain', 'ISO 3166-1 alpha-3 CODE': 'ESP', 'Population': '46786482', 'Continent': 'Europe', 'Total Cases': '11551574', 'Total Deaths': '102541', 'Tot\xa0Cases//1M pop': '246900', 'Tot\xa0Deaths/1M pop': '2192', 'Death percentage': '0.887679895'}
{'Country': 'Sri Lanka', 'Other names': 'Sri Lanka', 'ISO 3166-1 alpha-3 CODE': 'LKA', 'Population': '21570428', 'Continent': 'Asia', 'Total Cases': '661991', 'Total Deaths': '16481', 'Tot\xa0Cases//1M pop': '30690', 'Tot\xa0Deaths/1M pop': '764', 'Death percentage': '2.489610886'}
{'Country': 'St. Barth ', 'Other names': 'Saint Barthélemy', 'ISO 3166-1 alpha-3 CODE': 'BLM', 'Population': '9930', 'Continent': 'Latin America and the Caribbean', 'Total Cases': '4150', 'Total Deaths': '6', 'Tot\xa0Cases//1M pop': '417925', 'Tot\xa0Deaths/1M pop': '604', 'Death percentage': '0.144578313'}
{'Country': 'St. Vincent Grenadines', 'Other names': 'Saint Vincent and the Grenadines', 'ISO 3166-1 alpha-3 CODE': 'VCT', 'Population': '111557', 'Continent': 'Latin America and the Caribbean', 'Total Cases': '6746', 'Total Deaths': '106', 'Tot\xa0Cases//1M pop': '60471', 'Tot\xa0Deaths/1M pop': '950', 'Death percentage': '1.571301512'}
{'Country': 'Sudan', 'Other names': 'Sudan', 'ISO 3166-1 alpha-3 CODE': 'SDN', 'Population': '45640385', 'Continent': 'Africa', 'Total Cases': '61955', 'Total Deaths': '4907', 'Tot\xa0Cases//1M pop': '1357', 'Tot\xa0Deaths/1M pop': '108', 'Death percentage': '7.920264708'}
{'Country': 'Suriname', 'Other names': 'Suriname', 'ISO 3166-1 alpha-3 CODE': 'SUR', 'Population': '595833', 'Continent': 'Latin America and the Caribbean', 'Total Cases': '79232', 'Total Deaths': '1325', 'Tot\xa0Cases//1M pop': '132977', 'Tot\xa0Deaths/1M pop': '2224', 'Death percentage': '1.67230412'}
{'Country': 'Sweden', 'Other names': 'Sweden', 'ISO 3166-1 alpha-3 CODE': 'SWE', 'Population': '10209507', 'Continent': 'Europe', 'Total Cases': '2487852', 'Total Deaths': '18331', 'Tot\xa0Cases//1M pop': '243680', 'Tot\xa0Deaths/1M pop': '1795', 'Death percentage': '0.736820357'}
{'Country': 'Switzerland', 'Other names': 'Switzerland', 'ISO 3166-1 alpha-3 CODE': 'CHE', 'Population': '8765420', 'Continent': 'Europe', 'Total Cases': '3490876', 'Total Deaths': '13715', 'Tot\xa0Cases//1M pop': '398255', 'Tot\xa0Deaths/1M pop': '1565', 'Death percentage': '0.392881328'}
{'Country': 'Syria', 'Other names': 'Syrian Arab Republic', 'ISO 3166-1 alpha-3 CODE': 'SYR', 'Population': '18244381', 'Continent': 'Asia', 'Total Cases': '55711', 'Total Deaths': '3144', 'Tot\xa0Cases//1M pop': '3054', 'Tot\xa0Deaths/1M pop': '172', 'Death percentage': '5.64340974'}
{'Country': 'Taiwan', 'Other names': 'China, Taiwan Province of China', 'ISO 3166-1 alpha-3 CODE': 'TWN', 'Population': '23892241', 'Continent': 'Asia', 'Total Cases': '24310', 'Total Deaths': '853', 'Tot\xa0Cases//1M pop': '1017', 'Tot\xa0Deaths/1M pop': '36', 'Death percentage': '3.508844097'}
{'Country': 'Tajikistan', 'Other names': 'Tajikistan', 'ISO 3166-1 alpha-3 CODE': 'TJK', 'Population': '9912437', 'Continent': 'Asia', 'Total Cases': '17388', 'Total Deaths': '124', 'Tot\xa0Cases//1M pop': '1754', 'Tot\xa0Deaths/1M pop': '13', 'Death percentage': '0.713135496'}
{'Country': 'Tanzania', 'Other names': 'United Republic of Tanzania', 'ISO 3166-1 alpha-3 CODE': 'TZA', 'Population': '62710097', 'Continent': 'Africa', 'Total Cases': '33815', 'Total Deaths': '800', 'Tot\xa0Cases//1M pop': '539', 'Tot\xa0Deaths/1M pop': '13', 'Death percentage': '2.365813988'}
{'Country': 'Thailand', 'Other names': 'Thailand', 'ISO 3166-1 alpha-3 CODE': 'THA', 'Population': '70106601', 'Continent': 'Asia', 'Total Cases': '3711595', 'Total Deaths': '25418', 'Tot\xa0Cases//1M pop': '52942', 'Tot\xa0Deaths/1M pop': '363', 'Death percentage': '0.684826874'}
{'Country': 'Timor-Leste', 'Other names': 'Timor-Leste', 'ISO 3166-1 alpha-3 CODE': 'TLS', 'Population': '1362386', 'Continent': 'Asia', 'Total Cases': '22832', 'Total Deaths': '130', 'Tot\xa0Cases//1M pop': '16759', 'Tot\xa0Deaths/1M pop': '95', 'Death percentage': '0.569376314'}
{'Country': 'Togo', 'Other names': 'Togo', 'ISO 3166-1 alpha-3 CODE': 'TGO', 'Population': '8618172', 'Continent': 'Africa', 'Total Cases': '36944', 'Total Deaths': '272', 'Tot\xa0Cases//1M pop': '4287', 'Tot\xa0Deaths/1M pop': '32', 'Death percentage': '0.736249459'}
{'Country': 'Tonga', 'Other names': 'Tonga', 'ISO 3166-1 alpha-3 CODE': 'TON', 'Population': '107792', 'Continent': 'Oceania', 'Total Cases': '7127', 'Total Deaths': '9', 'Tot\xa0Cases//1M pop': '66118', 'Tot\xa0Deaths/1M pop': '83', 'Death percentage': '0.126280342'}
{'Country': 'Trinidad and Tobago', 'Other names': 'Trinidad and Tobago', 'ISO 3166-1 alpha-3 CODE': 'TTO', 'Population': '1407422', 'Continent': 'Latin America and the Caribbean', 'Total Cases': '138425', 'Total Deaths': '3756', 'Tot\xa0Cases//1M pop': '98354', 'Tot\xa0Deaths/1M pop': '2669', 'Death percentage': '2.713382698'}
{'Country': 'Tunisia', 'Other names': 'Tunisia', 'ISO 3166-1 alpha-3 CODE': 'TUN', 'Population': '12035092', 'Continent': 'Africa', 'Total Cases': '1035884', 'Total Deaths': '28323', 'Tot\xa0Cases//1M pop': '86072', 'Tot\xa0Deaths/1M pop': '2353', 'Death percentage': '2.734186453'}
{'Country': 'Turkey', 'Other names': 'Turkey', 'ISO 3166-1 alpha-3 CODE': 'TUR', 'Population': '85927644', 'Continent': 'Asia', 'Total Cases': '14894731', 'Total Deaths': '98157', 'Tot\xa0Cases//1M pop': '173340', 'Tot\xa0Deaths/1M pop': '1142', 'Death percentage': '0.659004852'}
{'Country': 'Turks and Caicos', 'Other names': 'Turks and Caicos Islands', 'ISO 3166-1 alpha-3 CODE': 'TCAÂ\xa0', 'Population': '39634', 'Continent': 'Latin America and the Caribbean', 'Total Cases': '5910', 'Total Deaths': '36', 'Tot\xa0Cases//1M pop': '149114', 'Tot\xa0Deaths/1M pop': '908', 'Death percentage': '0.609137056'}
{'Country': 'UAE', 'Other names': 'United Arab Emirates', 'ISO 3166-1 alpha-3 CODE': 'ARE', 'Population': '10099567', 'Continent': 'Asia', 'Total Cases': '892170', 'Total Deaths': '2302', 'Tot\xa0Cases//1M pop': '88337', 'Tot\xa0Deaths/1M pop': '228', 'Death percentage': '0.258022574'}
{'Country': 'Uganda', 'Other names': 'Uganda', 'ISO 3166-1 alpha-3 CODE': 'UGA', 'Population': '48267221', 'Continent': 'Africa', 'Total Cases': '163936', 'Total Deaths': '3595', 'Tot\xa0Cases//1M pop': '3396', 'Tot\xa0Deaths/1M pop': '74', 'Death percentage': '2.192928948'}
{'Country': 'UK', 'Other names': 'United Kingdom of Great Britain and Northern Ireland', 'ISO 3166-1 alpha-3 CODE': 'GBR', 'Population': '68510300', 'Continent': 'Europe', 'Total Cases': '21216874', 'Total Deaths': '165570', 'Tot\xa0Cases//1M pop': '309689', 'Tot\xa0Deaths/1M pop': '2417', 'Death percentage': '0.780369436'}
{'Country': 'Ukraine', 'Other names': 'Ukraine', 'ISO 3166-1 alpha-3 CODE': 'UKR', 'Population': '43273831', 'Continent': 'Europe', 'Total Cases': '4968881', 'Total Deaths': '107980', 'Tot\xa0Cases//1M pop': '114824', 'Tot\xa0Deaths/1M pop': '2495', 'Death percentage': '2.173125096'}
{'Country': 'Uruguay', 'Other names': 'Uruguay', 'ISO 3166-1 alpha-3 CODE': 'URY', 'Population': '3494806', 'Continent': 'Latin America and the Caribbean', 'Total Cases': '889513', 'Total Deaths': '7166', 'Tot\xa0Cases//1M pop': '254524', 'Tot\xa0Deaths/1M pop': '2050', 'Death percentage': '0.805609362'}
{'Country': 'USA', 'Other names': 'United States of America', 'ISO 3166-1 alpha-3 CODE': 'USA', 'Population': '334400597', 'Continent': 'Northern America', 'Total Cases': '81839052', 'Total Deaths': '1008222', 'Tot\xa0Cases//1M pop': '244734', 'Tot\xa0Deaths/1M pop': '3015', 'Death percentage': '1.231957086'}
{'Country': 'Uzbekistan', 'Other names': 'Uzbekistan', 'ISO 3166-1 alpha-3 CODE': 'UZB', 'Population': '34318156', 'Continent': 'Asia', 'Total Cases': '237853', 'Total Deaths': '1637', 'Tot\xa0Cases//1M pop': '6931', 'Tot\xa0Deaths/1M pop': '48', 'Death percentage': '0.688240216'}
{'Country': 'Vanuatu', 'Other names': 'Vanuatu', 'ISO 3166-1 alpha-3 CODE': 'VUT', 'Population': '319701', 'Continent': 'Oceania', 'Total Cases': '4107', 'Total Deaths': '2', 'Tot\xa0Cases//1M pop': '12846', 'Tot\xa0Deaths/1M pop': '6', 'Death percentage': '0.048697346'}
{'Country': 'Vatican City', 'Other names': 'Holy See', 'ISO 3166-1 alpha-3 CODE': 'VAT', 'Population': '805', 'Continent': 'Europe', 'Total Cases': '29', 'Total Deaths': '0', 'Tot\xa0Cases//1M pop': '36025', 'Tot\xa0Deaths/1M pop': '0', 'Death percentage': '0'}
{'Country': 'Venezuela', 'Other names': 'Venezuela (Bolivarian Republic of)', 'ISO 3166-1 alpha-3 CODE': 'VEN', 'Population': '28294895', 'Continent': 'Latin America and the Caribbean', 'Total Cases': '520843', 'Total Deaths': '5686', 'Tot\xa0Cases//1M pop': '18408', 'Tot\xa0Deaths/1M pop': '201', 'Death percentage': '1.091691738'}
{'Country': 'Vietnam', 'Other names': 'Viet Nam', 'ISO 3166-1 alpha-3 CODE': 'VNM', 'Population': '98871712', 'Continent': 'Asia', 'Total Cases': '9818328', 'Total Deaths': '42600', 'Tot\xa0Cases//1M pop': '99304', 'Tot\xa0Deaths/1M pop': '431', 'Death percentage': '0.433882429'}
{'Country': 'Wallis and Futuna', 'Other names': 'Wallis and Futuna Islands', 'ISO 3166-1 alpha-3 CODE': 'WLF', 'Population': '10894', 'Continent': 'Oceania', 'Total Cases': '454', 'Total Deaths': '7', 'Tot\xa0Cases//1M pop': '41674', 'Tot\xa0Deaths/1M pop': '643', 'Death percentage': '1.54185022'}
{'Country': 'Western Sahara', 'Other names': 'Western Sahara', 'ISO 3166-1 alpha-3 CODE': 'ESHÂ\xa0', 'Population': '623031', 'Continent': 'Africa', 'Total Cases': '10', 'Total Deaths': '1', 'Tot\xa0Cases//1M pop': '16', 'Tot\xa0Deaths/1M pop': '2', 'Death percentage': '10'}
{'Country': 'Yemen', 'Other names': 'Yemen', 'ISO 3166-1 alpha-3 CODE': 'YEM', 'Population': '30975258', 'Continent': 'Asia', 'Total Cases': '11806', 'Total Deaths': '2143', 'Tot\xa0Cases//1M pop': '381', 'Tot\xa0Deaths/1M pop': '69', 'Death percentage': '18.15178723'}
{'Country': 'Zambia', 'Other names': 'Zambia', 'ISO 3166-1 alpha-3 CODE': 'ZMB', 'Population': '19284482', 'Continent': 'Africa', 'Total Cases': '317076', 'Total Deaths': '3967', 'Tot\xa0Cases//1M pop': '16442', 'Tot\xa0Deaths/1M pop': '206', 'Death percentage': '1.251119605'}
{'Country': 'Zimbabwe', 'Other names': 'Zimbabwe', 'ISO 3166-1 alpha-3 CODE': 'ZWE', 'Population': '15241601', 'Continent': 'Africa', 'Total Cases': '246525', 'Total Deaths': '5446', 'Tot\xa0Cases//1M pop': '16174', 'Tot\xa0Deaths/1M pop': '357', 'Death percentage': '2.209106581'}
with open(local_file1, 'r') as file:
reader = csv.reader(file, delimiter = ';',quoting=csv.QUOTE_ALL)
for row in reader:
print(row)
['Country,Other names,ISO 3166-1 alpha-3 CODE,Population,Continent,Total Cases,Total Deaths,Tot\xa0Cases//1M pop,Tot\xa0Deaths/1M pop,Death percentage']
['Afghanistan,Afghanistan,AFG,40462186,Asia,177827,7671,4395,190,4.313743132']
['Albania,Albania,ALB,2872296,Europe,273870,3492,95349,1216,1.275057509']
['Algeria,Algeria,DZA,45236699,Africa,265691,6874,5873,152,2.587215976']
['Andorra,Andorra,AND,77481,Europe,40024,153,516565,1975,0.382270638']
['Angola,Angola,AGO,34654212,Africa,99194,1900,2862,55,1.915438434']
['Anguilla,Anguilla,AIA,15237,Latin America and the Caribbean,2700,9,177200,591,0.333333333']
['Antigua and Barbuda,Antigua and Barbuda,ATG,99348,Latin America and the Caribbean,7493,135,75422,1359,1.801681569']
['Argentina,Argentina,ARG,45921761,Latin America and the Caribbean,9041124,128065,196881,2789,1.416472111']
['Armenia,Armenia,ARM,2972939,Asia,422574,8617,142140,2898,2.039169471']
['Aruba,Aruba,ABW,107560,Latin America and the Caribbean,34051,212,316577,1971,0.622595518']
['Australia,Australia,AUS,26017767,Oceania,4680816,6384,179908,245,0.136386476']
['Austria,Austria,AUT,9096360,Europe,3887355,15985,427353,1757,0.411205048']
['Azerbaijan,Azerbaijan,AZE,10299156,Asia,792061,9697,76905,942,1.224274393']
['Bahamas,Bahamas,BHM,399822,Latin America and the Caribbean,33295,788,83275,1971,2.36672173']
['Bahrain,Bahrain,BHR,1804995,Asia,556241,1471,308168,815,0.264453717']
['Bangladesh,Bangladesh,BGD,167561502,Asia,1951770,29122,11648,174,1.492081546']
['Barbados,Barbados,BRB,287991,Latin America and the Caribbean,59938,375,208125,1302,0.625646501']
['Belarus,Belarus,BLR,9443882,Europe,965322,6844,102217,725,0.708986224']
['Belgium,Belgium,BEL,11677924,Europe,3851048,30826,329772,2640,0.800457434']
['Belize,Belize,BLZ,410260,Latin America and the Caribbean,57289,656,139641,1599,1.14507148']
['Benin,Benin,BEN,12678649,Africa,26952,163,2126,13,0.604778866']
['Bermuda,Bermuda,BMU,61875,Northern America,12564,128,203055,2069,1.018783827']
['Bhutan,Bhutan,BTN,786480,Asia,31437,12,39972,15,0.038171581']
['Bolivia,Bolivia (Plurinational State of),BOL,11951714,Latin America and the Caribbean,902448,21896,75508,1832,2.426289382']
['Bosnia and Herzegovina,Bosnia and Herzegovina,BIH,3245097,Europe,375693,15719,115773,4844,4.184001299']
['Botswana,Botswana,BWA,2434708,Africa,305526,2686,125488,1103,0.879139582']
['Brazil,Brazil,BRA,215204501,Latin America and the Caribbean,29999816,660269,139401,3068,2.200910166']
['British Virgin Islands,British Virgin Islands,VGB,30583,Latin America and the Caribbean,6155,62,201256,2027,1.007311129']
['Brunei ,Brunei Darussalam,BRN,444812,Asia,135974,213,305689,479,0.156647594']
['Bulgaria,Bulgaria,BGR,6856886,Europe,1140679,36568,166355,5333,3.205809873']
['Burkina Faso,Burkina Faso,BFA,21905848,Africa,20853,382,952,17,1.831870714']
['Burundi,Burundi,BDI,12510155,Africa,38519,38,3079,3,0.098652613']
['Cabo Verde,Cabo Verde,CPV,566557,Africa,55960,401,98772,708,0.716583274']
['Cambodia,Cambodia,KHM,17123941,Asia,135747,3054,7927,178,2.249773476']
['Cameroon,Cameroon,CMR,27701805,Africa,119544,1927,4315,70,1.611958777']
['Canada,Canada,CAN,38321435,Northern America,3499226,37690,91312,984,1.077095335']
['CAR,Central African Republic,CAF,4976719,Africa,14649,113,2944,23,0.771383712']
['Caribbean Netherlands,"Bonaire, Sint Eustatius and Saba",BES,26650,Latin America and the Caribbean,8574,33,321726,1238,0.384884535']
['Cayman Islands,Cayman Islands,CYM,67073,Latin America and the Caribbean,20606,24,307218,358,0.116470931']
['Chad,Chad,TCD,17250246,Africa,7308,191,424,11,2.613574165']
['Channel Islands,Guernsey,GGY,176668,Europe,69036,156,390767,883,0.22596906']
['Chile,Chile,CHL,19403451,Latin America and the Caribbean,3486653,56750,179692,2925,1.627635443']
['China,China,CHN,1439323776,Asia,154738,4638,108,3,2.99732451']
['Colombia,Colombia,COL,51832231,Latin America and the Caribbean,6085926,139660,117416,2694,2.294802796']
['Comoros,Comoros,COM,902011,Africa,8093,160,8972,177,1.977017175']
['Congo,Congo,COG,5755689,Africa,24071,385,4182,67,1.599435005']
['Cook Islands,Cook Islands,COK,17592,Oceania,2118,0,120396,0,0']
['Costa Rica,Costa Rica,CRI,5175547,Latin America and the Caribbean,839368,8308,162180,1605,0.98979232']
['Croatia,Croatia,HRV,4060951,Europe,1102730,15601,271545,3842,1.414761546']
['Cuba,Cuba,CUB,11314513,Latin America and the Caribbean,1092547,8514,96562,752,0.779279976']
['Curaçao,Curaçao,CUW,165268,Latin America and the Caribbean,40671,267,246091,1616,0.656487423']
['Cyprus,Cyprus,CYP,1222745,Asia,439964,947,359817,774,0.215244884']
['Czechia,Czech Republic,CZE,10743762,Europe,3830631,39720,356545,3697,1.036904886']
['Denmark,Denmark,DNK,5827911,Europe,2919428,5762,500939,989,0.19736743']
['Djibouti,Djibouti,DJI,1013146,Africa,15590,189,15388,187,1.212315587']
['Dominica,Dominica,DMA,72299,Latin America and the Caribbean,11891,63,164470,871,0.529812463']
['Dominican Republic,Dominican Republic,DOM,11038333,Latin America and the Caribbean,578130,4375,52375,396,0.756750212']
['Democratic Republic of the Congo,Democratic Republic of the Congo,COD,94323344,Africa,86748,1337,920,14,1.541245908']
['Ecuador,Ecuador,ECU,18111933,Latin America and the Caribbean,859890,35421,47476,1956,4.119247811']
['Egypt,Egypt,EGY,105711844,Africa,505264,24417,4780,231,4.832523196']
['El Salvador,El Salvador,SLV,6543499,Latin America and the Caribbean,161570,4120,24692,630,2.549978338']
['Equatorial Guinea,Equatorial Guinea,GNQ,1483588,Africa,15903,183,10719,123,1.150726278']
['Eritrea,Eritrea,ERI,3632329,Africa,9728,103,2678,28,1.058799342']
['Estonia,Estonia,EST,1328097,Europe,558706,2468,420682,1858,0.441735009']
['Eswatini,Eswatini,SWZ,1181191,Africa,69851,1394,59136,1180,1.995676511']
['Ethiopia,Ethiopia,ETH,119945147,Africa,469819,7504,3917,63,1.597210841']
['Faeroe Islands,Faeroe Islands,FRO,49188,Europe,34237,28,696044,569,0.081782866']
['Falkland Islands,Falkland Islands (Malvinas),FLK,3657,Latin America and the Caribbean,123,0,33634,0,0']
['Fiji,Fiji,FJI,907817,Oceania,64422,834,70964,919,1.294588805']
['Finland,Finland,FIN,5555788,Europe,889626,3178,160126,572,0.357228768']
['France,France,FRA,65526369,Europe,25997852,142506,396754,2175,0.548145285']
['French Guiana,French Guiana,GUF,312224,Latin America and the Caribbean,79075,394,253264,1262,0.498261144']
['French Polynesia,French Polynesia,PYF,283751,Oceania,72318,646,254864,2277,0.893276916']
['Gabon,Gabon,GAB,2317612,Africa,47586,303,20532,131,0.636741899']
['Gambia,Gambia,GMB,2535418,Africa,11988,365,4728,144,3.044711378']
['Georgia,Georgia,GEO,3975762,Asia,1649222,16756,414819,4215,1.015994208']
['Germany,Germany,DEU,84252947,Europe,21646375,130563,256921,1550,0.603163347']
['Ghana,Ghana,GHA,32207812,Africa,160971,1445,4998,45,0.897677221']
['Gibraltar,Gibraltar,GIB,33673,Europe,16979,101,504232,2999,0.594852465']
['Greece,Greece,GRC,10333930,Europe,3077711,27684,297826,2679,0.899499661']
['Greenland,Greenland,GRL,56942,Northern America,11971,21,210231,369,0.175423941']
['Grenada,Grenada,GRD,113436,Latin America and the Caribbean,14024,218,123629,1922,1.554478038']
['Guadeloupe,Guadeloupe,GLP,400244,Latin America and the Caribbean,130705,843,326563,2106,0.64496385']
['Guatemala,Guatemala,GTM,18495493,Latin America and the Caribbean,830745,17325,44916,937,2.085477493']
['Guinea,Guinea,GIN,13755881,Africa,36459,440,2650,32,1.206835075']
['Guinea-Bissau,Guinea-Bissau,GNB,2049374,Africa,8151,170,3977,83,2.085633665']
['Guyana,Guyana,GUY,793196,Latin America and the Caribbean,63272,1226,79768,1546,1.93766595']
['Haiti,Haiti,HTI,11645833,Latin America and the Caribbean,30549,833,2623,72,2.726766834']
['Honduras,Honduras,HND,10180299,Latin America and the Caribbean,421062,10880,41360,1069,2.583942507']
['Hong Kong,"China, Hong Kong Special Administrative Region",HKG,7603455,Asia,1171422,8172,154064,1075,0.69761367']
['Hungary,Hungary,HUN,9617409,Europe,1854198,45510,192796,4732,2.454430433']
['Iceland,Iceland,ISL,345120,Europe,181830,101,526860,293,0.055546389']
['India,India,IND,1403754381,Asia,43029044,521388,30653,371,1.211711792']
['Indonesia,Indonesia,IDN,278586508,Asia,6019981,155288,21609,557,2.579543025']
['Iran,United Kingdom,IRN,85874667,Asia,7167646,140315,83466,1634,1.95761621']
['Iraq,Iraq,IRQ,41801625,Asia,2320260,25173,55506,602,1.084921517']
['Ireland,Ireland,IRL,5034333,Europe,1471210,6786,292235,1348,0.461252982']
['Isle of Man,Isle of Man,IMN,85821,Europe,28416,84,331108,979,0.295608108']
['Israel,Israel,ISR,9326000,Asia,3943153,10530,422813,1129,0.267045179']
['Italy,Italy,ITA,60306185,Europe,14846514,159784,246186,2650,1.076239176']
["Ivory Coast,Côte d'Ivoire,CIV,27520953,Africa,81761,796,2971,29,0.973569306"]
['Jamaica,Jamaica,JAM,2983794,Latin America and the Caribbean,128811,2893,43170,970,2.245926202']
['Japan,Japan,JPN,125798669,Asia,6653841,28248,52893,225,0.424536745']
['Jordan,Jordan,JOR,10380442,Asia,1689314,14003,162740,1349,0.828916353']
['Kazakhstan,Kazakhstan,KAZ,19169833,Asia,1305188,13660,68086,713,1.046592522']
['Kenya,Kenya,KEN,55843563,Africa,323454,5648,5792,101,1.746152467']
['Kiribati,Kiribati,KIR,122656,Oceania,3067,13,25005,106,0.423866971']
['Kuwait,Kuwait,KWT,4381108,Asia,629525,2554,143691,583,0.405702712']
['Kyrgyzstan,Kyrgyzstan,KGZ,6712569,Asia,200968,2991,29939,446,1.488296644']
["Laos,Lao People's Democratic Republic,LAO,7460338,Asia,183560,679,24605,91,0.369906298"]
['Latvia,Latvia,LVA,1849698,Europe,802534,5643,433873,3051,0.703147779']
['Lebanon,Lebanon,LBN,6771939,Asia,1092995,10315,161401,1523,0.943737163']
['Lesotho,Lesotho,LSO,2171978,Africa,32910,697,15152,321,2.117897296']
['Liberia,Liberia,LBR,5265647,Africa,7400,294,1405,56,3.972972973']
['Libya,Libya,LBY,7034832,Africa,501738,6419,71322,912,1.279352969']
['Liechtenstein,Liechtenstein,LIE,38320,Europe,16429,84,428732,2192,0.51129101']
['Lithuania,Lithuania,LTU,2655811,Europe,1030966,8907,388193,3354,0.863947017']
['Luxembourg,Luxembourg,LUX,643801,Europe,216979,1037,337028,1611,0.477926435']
['Macao,"China, Macao Special Administrative Region",MAC,664828,Asia,82,0,123,0,0']
['Madagascar,Madagascar,MDG,28936285,Africa,64050,1388,2213,48,2.167056987']
['Malawi,Malawi,MWI,19994654,Africa,85664,2626,4284,131,3.065465073']
['Malaysia,Malaysia,MYS,33091831,Asia,4246467,35099,128324,1061,0.826545926']
['Maldives,Maldives,MDV,557204,Asia,176993,298,317645,535,0.168368241']
['Mali,Mali,MLI,21271006,Africa,30495,728,1434,34,2.387276603']
['Malta,Malta,MLT,443602,Europe,81596,641,183940,1445,0.785577724']
['Marshall Islands,Marshall Islands,MHL,59889,Oceania,7,0,117,0,0']
['Martinique,Martinique,MTQ,374756,Latin America and the Caribbean,141415,909,377352,2426,0.642788954']
['Mauritania,Mauritania,MRT,4863443,Africa,58670,982,12063,202,1.673768536']
['Mauritius,Mauritius,MUS,1275463,Africa,36628,968,28717,759,2.642786939']
['Mayotte,Mayotte,MYTÂ\xa0,284330,Africa,36891,187,129747,658,0.506898702']
['Mexico,Mexico,MEX,131303955,Latin America and the Caribbean,5665376,323212,43147,2462,5.705040583']
['Micronesia,Micronesia (Federated States of),FSM,117134,Oceania,1,0,9,0,0']
['Moldova,Republic of Moldova,MDA,4017550,Europe,514199,11446,127988,2849,2.225986437']
['Monaco,Monaco,MCO,39729,Europe,10842,54,272899,1359,0.498063088']
['Mongolia,Mongolia,MNG,3370682,Asia,468610,2177,139025,646,0.464565417']
['Montenegro,,MNE,628205,Europe,233326,2705,371417,4306,1.15932215']
['Montserrat,Montserrat,MSR,4997,Latin America and the Caribbean,175,2,35021,400,1.142857143']
['Morocco,Morocco,MAR,37676342,Africa,1163526,16060,30882,426,1.380287162']
['Mozambique,Mozambique,MOZ,32787052,Africa,225266,2200,6871,67,0.976623192']
['Myanmar,Myanmar,MMR,55048340,Asia,611875,19433,11115,353,3.175975485']
['Namibia,Namibia,NAM,2621429,Africa,157646,4019,60137,1533,2.549382794']
['Nepal,Nepal,NPL,30053867,Asia,978475,11951,32557,398,1.221390429']
['Netherlands,Netherlands,NLD,17201245,Europe,7908701,22016,459775,1280,0.278376942']
['New Caledonia,New Caledonia,NCL,290302,Oceania,60294,311,207694,1071,0.515805884']
['New Zealand,New Zealand,NZL,5002100,Oceania,693219,350,138586,70,0.050489095']
['Nicaragua,Nicaragua,NIC,6762511,Latin America and the Caribbean,18434,224,2726,33,1.215145926']
['Niger,Niger,NER,25738714,Africa,8811,308,342,12,3.495630462']
['Nigeria,Nigeria,NGA,215077352,Africa,255468,3142,1188,15,1.229899635']
['Niue,Niue,NIU,1645,Oceania,7,0,4255,0,0']
['North Macedonia,The former Yugoslav Republic of Macedonia,MKD,2083224,Europe,306670,9228,147209,4430,3.009097727']
['Norway,Norway,NOR,5495449,Europe,1408708,2518,256341,458,0.178745347']
['Oman,Oman,OMN,5333815,Asia,388468,4251,72831,797,1.094298629']
['Pakistan,Pakistan,PAK,228397520,Asia,1525466,30361,6679,133,1.990277069']
['Palau,Palau,PLW,18245,Oceania,4042,6,221540,329,0.148441366']
['Palestine,State of Palestine,WBG,5308883,Asia,581236,5351,109484,1008,0.920624325']
['Panama,Panama,PAN,4433639,Latin America and the Caribbean,765213,8170,172593,1843,1.067676582']
['Papua New Guinea,Papua New Guinea,PNG,9243590,Oceania,42203,640,4566,69,1.516479871']
['Paraguay,Paraguay,PRY,7285892,Latin America and the Caribbean,648353,18731,88987,2571,2.889012621']
['Peru,Peru,PER,33775745,Latin America and the Caribbean,3548559,212328,105062,6286,5.983499218']
['Philippines,Philippines,PHL,112133868,Asia,3679485,59343,32813,529,1.612807227']
['Poland,Poland,POL,37774045,Europe,5969621,115345,158035,3054,1.932199716']
['Portugal,Portugal,PRT,10144662,Europe,3604114,21693,355272,2138,0.601895501']
['Qatar,Qatar,QAT,2807805,Asia,361819,677,128862,241,0.18711013']
['Réunion,Réunion,REU,906497,Africa,336945,709,371700,782,0.210420098']
['Romania,Romania,ROU,19013049,Europe,2860094,65090,150428,3423,2.275799327']
['Russia,Russian Federation,RUS,146044010,Europe,17896866,369708,122544,2531,2.065769504']
['Rwanda,Rwanda,RWA,13513881,Africa,129728,1458,9600,108,1.123889985']
['S. Korea,Republic of Korea,KOR,51346429,Asia,13874216,17235,270208,336,0.124223235']
['Saint Helena,Saint Helena,SHN,6109,Africa,2,0,327,0,0']
['Saint Kitts and Nevis,Saint Kitts and Nevis,KNA,53858,Latin America and the Caribbean,5549,43,103030,798,0.774914399']
['Saint Lucia,Saint Lucia,LCA,185096,Latin America and the Caribbean,22964,365,124065,1972,1.589444348']
['Saint Martin,Saint Martin,MAF,39820,Latin America and the Caribbean,10107,63,253817,1582,0.623330365']
['Saint Pierre Miquelon,\xa0Saint Pierre and Miquelon,SPM,5744,Northern America,1957,1,340703,174,0.05109862']
['Samoa,Samoa,WSM,200722,Oceania,2285,1,11384,5,0.043763676']
['San Marino,San Marino,SMR,34056,Europe,15181,113,445766,3318,0.744351492']
['Sao Tome and Principe,Sao Tome and Principe,STP,226281,Africa,5945,73,26273,323,1.227922624']
['Saudi Arabia,Saudi Arabia,SAU,35762746,Asia,751076,9048,21002,253,1.204671698']
['Senegal,Senegal,SEN,17515750,Africa,85919,1965,4905,112,2.287037791']
['Serbia,Serbia,SRB,8675762,Europe,1980722,15825,228305,1824,0.79895109']
['Seychelles,Seychelles,SYC,99413,Africa,40421,164,406597,1650,0.405729695']
['Sierra Leone,Sierra Leone,SLE,8260822,Africa,7674,125,929,15,1.628876727']
['Singapore,Singapore,SGP,5930887,Asia,1109744,1276,187113,215,0.114981473']
['Sint Maarten,Sint Maarten,SXM,43728,Latin America and the Caribbean,9766,86,223335,1967,0.880606185']
['Slovakia,Slovakia,SVK,5464272,Europe,1725487,19417,315776,3553,1.125305493']
['Slovenia,Slovenia,SVN,2079438,Europe,973892,6501,468344,3126,0.667527816']
['Solomon Islands,Solomon Islands,SLB,716351,Oceania,11470,133,16012,186,1.159546643']
['Somalia,Somalia,SOM,16668781,Africa,26400,1348,1584,81,5.106060606']
['South Africa,South Africa,ZAF,60617532,Africa,3722954,100050,61417,1651,2.687382116']
['South Sudan,South Sudan,SSD,11423439,Africa,17278,138,1513,12,0.798703554']
['Spain,Spain,ESP,46786482,Europe,11551574,102541,246900,2192,0.887679895']
['Sri Lanka,Sri Lanka,LKA,21570428,Asia,661991,16481,30690,764,2.489610886']
['St. Barth ,Saint Barthélemy,BLM,9930,Latin America and the Caribbean,4150,6,417925,604,0.144578313']
['St. Vincent Grenadines,Saint Vincent and the Grenadines,VCT,111557,Latin America and the Caribbean,6746,106,60471,950,1.571301512']
['Sudan,Sudan,SDN,45640385,Africa,61955,4907,1357,108,7.920264708']
['Suriname,Suriname,SUR,595833,Latin America and the Caribbean,79232,1325,132977,2224,1.67230412']
['Sweden,Sweden,SWE,10209507,Europe,2487852,18331,243680,1795,0.736820357']
['Switzerland,Switzerland,CHE,8765420,Europe,3490876,13715,398255,1565,0.392881328']
['Syria,Syrian Arab Republic,SYR,18244381,Asia,55711,3144,3054,172,5.64340974']
['Taiwan,"China, Taiwan Province of China",TWN,23892241,Asia,24310,853,1017,36,3.508844097']
['Tajikistan,Tajikistan,TJK,9912437,Asia,17388,124,1754,13,0.713135496']
['Tanzania,United Republic of Tanzania,TZA,62710097,Africa,33815,800,539,13,2.365813988']
['Thailand,Thailand,THA,70106601,Asia,3711595,25418,52942,363,0.684826874']
['Timor-Leste,Timor-Leste,TLS,1362386,Asia,22832,130,16759,95,0.569376314']
['Togo,Togo,TGO,8618172,Africa,36944,272,4287,32,0.736249459']
['Tonga,Tonga,TON,107792,Oceania,7127,9,66118,83,0.126280342']
['Trinidad and Tobago,Trinidad and Tobago,TTO,1407422,Latin America and the Caribbean,138425,3756,98354,2669,2.713382698']
['Tunisia,Tunisia,TUN,12035092,Africa,1035884,28323,86072,2353,2.734186453']
['Turkey,Turkey,TUR,85927644,Asia,14894731,98157,173340,1142,0.659004852']
['Turks and Caicos,Turks and Caicos Islands,TCAÂ\xa0,39634,Latin America and the Caribbean,5910,36,149114,908,0.609137056']
['UAE,United Arab Emirates,ARE,10099567,Asia,892170,2302,88337,228,0.258022574']
['Uganda,Uganda,UGA,48267221,Africa,163936,3595,3396,74,2.192928948']
['UK,United Kingdom of Great Britain and Northern Ireland,GBR,68510300,Europe,21216874,165570,309689,2417,0.780369436']
['Ukraine,Ukraine,UKR,43273831,Europe,4968881,107980,114824,2495,2.173125096']
['Uruguay,Uruguay,URY,3494806,Latin America and the Caribbean,889513,7166,254524,2050,0.805609362']
['USA,United States of America,USA,334400597,Northern America,81839052,1008222,244734,3015,1.231957086']
['Uzbekistan,Uzbekistan,UZB,34318156,Asia,237853,1637,6931,48,0.688240216']
['Vanuatu,Vanuatu,VUT,319701,Oceania,4107,2,12846,6,0.048697346']
['Vatican City,Holy See,VAT,805,Europe,29,0,36025,0,0']
['Venezuela,Venezuela (Bolivarian Republic of),VEN,28294895,Latin America and the Caribbean,520843,5686,18408,201,1.091691738']
['Vietnam,Viet Nam,VNM,98871712,Asia,9818328,42600,99304,431,0.433882429']
['Wallis and Futuna,Wallis and Futuna Islands,WLF,10894,Oceania,454,7,41674,643,1.54185022']
['Western Sahara,Western Sahara,ESHÂ\xa0,623031,Africa,10,1,16,2,10']
['Yemen,Yemen,YEM,30975258,Asia,11806,2143,381,69,18.15178723']
['Zambia,Zambia,ZMB,19284482,Africa,317076,3967,16442,206,1.251119605']
['Zimbabwe,Zimbabwe,ZWE,15241601,Africa,246525,5446,16174,357,2.209106581']
Εγγραφή σε csv¶
with open('employee_file.csv', mode='w') as employee_file:
employee_writer = csv.writer(employee_file, delimiter=';', quotechar='"', quoting=csv.QUOTE_ALL)
employee_writer.writerow(['John Smith', 'Accounting', 'June'])
employee_writer.writerow(['Erica Meyers', 'IT', 'March'])
Εγγραφή σε CSV από dictionary (λεξικό). Σε αυτή την περίπτωση πρέπει να ορίσουμε προκαταβολικά τα ονόματα των στηλών (fieldnames παράμετρος στην μέθοδο DictWriter) για να γίνει η ταυτοποίηση των κλειδιών από το λεξικό κατά την εγγραφή.
with open('employee_file2.csv', mode='w') as csv_file:
writer = csv.DictWriter(csv_file, fieldnames= ['emp_name', 'dept', 'birth_month'],delimiter=';')
writer.writeheader()
writer.writerow({'emp_name': 'John Smith', 'dept': 'Accounting', 'birth_month': 'November'})
writer.writerow({'emp_name': 'Erica Meyers', 'dept': 'IT', 'birth_month': 'March'})
Η βιβλιοθήκη pandas¶
Δημιουργία pandas Series object
s = pd.Series([2, 4, 6, 8, 10])
Δημιουργία pandas Dataframe object. Η τελευτάι στήλη είναι από το προηγούμενο Series object.
df = pd.DataFrame({'X':[78,85,96,80,86], 'Y':[84,94,89,83,86],'Z':[86,97,96,72,83], 'V':s});
df
| X | Y | Z | V | |
|---|---|---|---|---|
| 0 | 78 | 84 | 86 | 2 |
| 1 | 85 | 94 | 97 | 4 |
| 2 | 96 | 89 | 96 | 6 |
| 3 | 80 | 83 | 72 | 8 |
| 4 | 86 | 86 | 83 | 10 |
Δημιουργία Index object
index = pd.Index(list('abcde'))
print(index)
Index(['a', 'b', 'c', 'd', 'e'], dtype='object')
Αλλαγή Index σε ένα dataframe
df = df.set_index(index)
df
| X | Y | Z | V | |
|---|---|---|---|---|
| a | 78 | 84 | 86 | 2 |
| b | 85 | 94 | 97 | 4 |
| c | 96 | 89 | 96 | 6 |
| d | 80 | 83 | 72 | 8 |
| e | 86 | 86 | 83 | 10 |
Επιλογή στηλών από το dataframe df σε ένα νέο dataframe με το όνομα df_subset
df_subset = df[['X','V']]
df_subset
| X | V | |
|---|---|---|
| a | 78 | 2 |
| b | 85 | 4 |
| c | 96 | 6 |
| d | 80 | 8 |
| e | 86 | 10 |
Ορισμός τιμών μια στήλης σε κενό (nan), με βάση κριτήρια
df.loc[df['Z'] >= 96,'Z'] = np.nan
df
| X | Y | Z | V | |
|---|---|---|---|---|
| a | 78 | 84 | 86.0 | 2 |
| b | 85 | 94 | NaN | 4 |
| c | 96 | 89 | NaN | 6 |
| d | 80 | 83 | 72.0 | 8 |
| e | 86 | 86 | 83.0 | 10 |
Φιλτράρισμα δεδομένων
df_2 = df[df['V'] >= 6]
df_2
| X | Y | Z | V | |
|---|---|---|---|---|
| c | 96 | 89 | NaN | 6 |
| d | 80 | 83 | 72.0 | 8 |
| e | 86 | 86 | 83.0 | 10 |
ή αλλιώς:
df_2 = df.loc[df['V'] >= 8]
df_2
| X | Y | Z | V | |
|---|---|---|---|---|
| d | 80 | 83 | 72.0 | 8 |
| e | 86 | 86 | 83.0 | 10 |
με βάση συνθήκη όπου περιέχονται στην στήλη V τα στοιχεία της λίστας options
options=[4,10]
rslt_df = df[df['V'].isin(options)]
rslt_df
| X | Y | Z | V | |
|---|---|---|---|---|
| b | 85 | 94 | NaN | 4 |
| e | 86 | 86 | 83.0 | 10 |
Τροποποίηση κελιού
df.at['a', 'V'] = 1000
df
| X | Y | Z | V | |
|---|---|---|---|---|
| a | 78 | 84 | 86.0 | 1000 |
| b | 85 | 94 | NaN | 4 |
| c | 96 | 89 | NaN | 6 |
| d | 80 | 83 | 72.0 | 8 |
| e | 86 | 86 | 83.0 | 10 |
df.to_csv("leonidas.csv", sep=';', index=False)
Προσθήκη γραμμής
# Νεα γραμμή σαν dataframe
row_df = pd.DataFrame([ pd.Series([1,2,8,99])], index = ["f"])
row_df.columns =['X', 'Y', 'Z', 'V']
row_df
| X | Y | Z | V | |
|---|---|---|---|---|
| f | 1 | 2 | 8 | 99 |
Εναλλακτικά φτιάχνουμε αν θελουμε την ιδια γραμμή με άλλη μέθοδο (μέσω ενός dictionary):
my_dictionary = {'X': [1], 'Y': [2],'Z': [8], 'V': [99]}
row_df = pd.DataFrame.from_dict(my_dictionary)
row_df = row_df.set_index(pd.Index(['f']))
row_df
| X | Y | Z | V | |
|---|---|---|---|---|
| f | 1 | 2 | 8 | 99 |
# Συννένωση
df1 = pd.concat([df,row_df],ignore_index=False)
df1
| X | Y | Z | V | |
|---|---|---|---|---|
| a | 78 | 84 | 86.0 | 1000 |
| b | 85 | 94 | NaN | 4 |
| c | 96 | 89 | NaN | 6 |
| d | 80 | 83 | 72.0 | 8 |
| e | 86 | 86 | 83.0 | 10 |
| f | 1 | 2 | 8.0 | 99 |
Αντιμετάθεση στηλών και γραμμών (transpose)
df2 = df1.T # transpose
df2
| a | b | c | d | e | f | |
|---|---|---|---|---|---|---|
| X | 78.0 | 85.0 | 96.0 | 80.0 | 86.0 | 1.0 |
| Y | 84.0 | 94.0 | 89.0 | 83.0 | 86.0 | 2.0 |
| Z | 86.0 | NaN | NaN | 72.0 | 83.0 | 8.0 |
| V | 1000.0 | 4.0 | 6.0 | 8.0 | 10.0 | 99.0 |
list(df2.columns)
['a', 'b', 'c', 'd', 'e', 'f']
list(df1.index)
['a', 'b', 'c', 'd', 'e', 'f']
Μπορούμε να διαβάσουμε ένα αρχείο CSV σαν pandas dataframe.
Ακολουθεί το παρακάτω παράδειγμα με δεδομένα Airbnb.
Λήψη αρχείου csv από το διαδίκτυο:
remote_url = 'http://data.insideairbnb.com/greece/attica/athens/2021-12-23/visualisations/listings.csv'
# Define the local filename to save data
local_file3 = 'listings.csv'
# Download remote and save locally
request.urlretrieve(remote_url, local_file3)
('listings.csv', <http.client.HTTPMessage at 0x7f43c0953c10>)
Ανάγνωση του αρχείου σαν panda DataFrame
# read the airbnb NYC listings csv file
airbnb = pd.read_csv(local_file3)
Εκτύπωση των πρώτων 10 γραμμών
airbnb.head()
| id | name | host_id | host_name | neighbourhood_group | neighbourhood | latitude | longitude | room_type | price | minimum_nights | number_of_reviews | last_review | reviews_per_month | calculated_host_listings_count | availability_365 | number_of_reviews_ltm | license | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 10595 | 96m2, 3BR, 2BA, Metro, WI-FI etc... | 37177 | Emmanouil | NaN | ΑΜΠΕΛΟΚΗΠΟΙ | 37.98863 | 23.76527 | Entire home/apt | 70 | 1 | 32 | 2021-09-24 | 0.25 | 6 | 114 | 7 | 00000957568 |
| 1 | 10990 | Athens Quality Apartments - Deluxe Apartment | 37177 | Emmanouil | NaN | ΑΜΠΕΛΟΚΗΠΟΙ | 37.98903 | 23.76448 | Entire home/apt | 50 | 1 | 54 | 2021-11-01 | 0.48 | 6 | 364 | 10 | 00001070920 |
| 2 | 10993 | Athens Quality Apartments - Studio | 37177 | Emmanouil | NaN | ΑΜΠΕΛΟΚΗΠΟΙ | 37.98888 | 23.76473 | Entire home/apt | 38 | 1 | 76 | 2021-12-09 | 0.67 | 6 | 312 | 22 | 00000957080 |
| 3 | 10995 | AQA-No2 1-bedroom, smart tv, fiber connection, | 37177 | Emmanouil | NaN | ΑΜΠΕΛΟΚΗΠΟΙ | 37.98903 | 23.76448 | Entire home/apt | 48 | 1 | 27 | 2021-11-08 | 0.19 | 6 | 236 | 4 | 00000957422 |
| 4 | 27262 | 54m2, 1-br, cable tv, wi-fi, metro | 37177 | Emmanouil | NaN | ΑΜΠΕΛΟΚΗΠΟΙ | 37.98924 | 23.76500 | Entire home/apt | 52 | 1 | 17 | 2020-01-08 | 0.15 | 6 | 176 | 0 | 00000957579 |
Εκτύπωση των 5 τελευταίων γραμμών
airbnb.tail(10)
| id | name | host_id | host_name | neighbourhood_group | neighbourhood | latitude | longitude | room_type | price | minimum_nights | number_of_reviews | last_review | reviews_per_month | calculated_host_listings_count | availability_365 | number_of_reviews_ltm | license | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 9663 | 53913979 | Beautiful Apt. closed to Monastiraki! | 35760684 | Eleni | NaN | ΚΕΡΑΜΕΙΚΟΣ | 37.980058 | 23.719821 | Entire home/apt | 90 | 2 | 0 | NaN | NaN | 5 | 360 | 0 | 88749558874 |
| 9664 | 53914527 | Cosy duplex apartment at Petralona | 195674383 | Selda | NaN | ΠΕΤΡΑΛΩΝΑ | 37.974262 | 23.709322 | Entire home/apt | 48 | 3 | 0 | NaN | NaN | 1 | 354 | 0 | Exempt |
| 9665 | 53914614 | Classical vibes in this deluxe apt. in heart o... | 35760684 | Eleni | NaN | ΚΕΡΑΜΕΙΚΟΣ | 37.980330 | 23.721530 | Entire home/apt | 90 | 2 | 0 | NaN | NaN | 5 | 360 | 0 | 33332541105 |
| 9666 | 53915110 | Family Room at the Trendy by Athens Prime Hotels | 436756020 | Paris | NaN | ΕΜΠΟΡΙΚΟ ΤΡΙΓΩΝΟ-ΠΛΑΚΑ | 37.985432 | 23.732206 | Private room | 143 | 1 | 0 | NaN | NaN | 1 | 324 | 0 | 1190373 |
| 9667 | 53916052 | Modern, stylish and big apartment in Athens ce... | 436763650 | Styliani | NaN | ΑΓΙΟΣ ΚΩΝΣΤΑΝΤΙΝΟΣ-ΠΛΑΤΕΙΑ ΒΑΘΗΣ | 37.984031 | 23.721455 | Entire home/apt | 70 | 2 | 0 | NaN | NaN | 1 | 364 | 0 | 00001393010 |
| 9668 | 53928165 | About love AT015 | 428201678 | Fenglin | NaN | ΑΓΙΟΣ ΚΩΝΣΤΑΝΤΙΝΟΣ-ΠΛΑΤΕΙΑ ΒΑΘΗΣ | 37.991477 | 23.723229 | Entire home/apt | 40 | 2 | 0 | NaN | NaN | 2 | 167 | 0 | 00001372314 |
| 9669 | 53930376 | Superior Queen Room by 33 Solonos suites | 114156592 | Bill & John | NaN | ΚΟΛΩΝΑΚΙ | 37.979829 | 23.736844 | Private room | 110 | 1 | 0 | NaN | NaN | 32 | 365 | 0 | 00001393195 |
| 9670 | 53932240 | 2 room sunny modern apartment, top floor + bal... | 34801484 | Daria | NaN | ΑΓΙΟΣ ΚΩΝΣΤΑΝΤΙΝΟΣ-ΠΛΑΤΕΙΑ ΒΑΘΗΣ | 37.982810 | 23.718970 | Entire home/apt | 33 | 4 | 0 | NaN | NaN | 1 | 276 | 0 | Exempt |
| 9671 | 53934984 | Διαμέρισμα στην πλατεία Αττικής ,πλησίον του μ... | 381802767 | Hakob | NaN | ΣΤΑΘΜΟΣ ΛΑΡΙΣΗΣ | 37.997002 | 23.720508 | Entire home/apt | 32 | 1 | 0 | NaN | NaN | 1 | 365 | 0 | Exempt |
| 9672 | 53938913 | A.P Athens | 423806621 | Anna | NaN | ΝΕΑ ΚΥΨΕΛΗ | 37.996459 | 23.744231 | Entire home/apt | 40 | 1 | 0 | NaN | NaN | 1 | 365 | 0 | 00001396920 |
Μπορούμε να πάρουμε για όλες τις αριθμητικές στήλες περιγραφικά στατιστικά (mean, std, min, τεταρτημόρια κτλ) με την μέθοδο describe()
airbnb.describe()
| id | host_id | neighbourhood_group | latitude | longitude | price | minimum_nights | number_of_reviews | reviews_per_month | calculated_host_listings_count | availability_365 | number_of_reviews_ltm | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| count | 9.673000e+03 | 9.673000e+03 | 0.0 | 9673.000000 | 9673.000000 | 9673.000000 | 9673.000000 | 9673.000000 | 7916.000000 | 9673.000000 | 9673.000000 | 9673.000000 |
| mean | 3.255635e+07 | 1.475417e+08 | NaN | 37.979912 | 23.731762 | 86.912850 | 3.234570 | 42.868913 | 1.520586 | 10.923292 | 240.921638 | 9.771632 |
| std | 1.366145e+07 | 1.188964e+08 | NaN | 0.013241 | 0.012369 | 326.785191 | 19.523021 | 71.038260 | 1.590922 | 22.798110 | 127.491219 | 15.926126 |
| min | 1.059500e+04 | 3.717700e+04 | NaN | 37.950550 | 23.697700 | 7.000000 | 1.000000 | 0.000000 | 0.010000 | 1.000000 | 0.000000 | 0.000000 |
| 25% | 2.293145e+07 | 3.904215e+07 | NaN | 37.969230 | 23.723970 | 36.000000 | 1.000000 | 1.000000 | 0.350000 | 1.000000 | 151.000000 | 0.000000 |
| 50% | 3.335690e+07 | 1.304658e+08 | NaN | 37.978340 | 23.729810 | 50.000000 | 2.000000 | 13.000000 | 1.000000 | 3.000000 | 296.000000 | 3.000000 |
| 75% | 4.377216e+07 | 2.284115e+08 | NaN | 37.987960 | 23.737820 | 80.000000 | 2.000000 | 52.000000 | 2.172500 | 9.000000 | 353.000000 | 13.000000 |
| max | 5.393891e+07 | 4.367636e+08 | NaN | 38.034497 | 23.780220 | 8000.000000 | 1000.000000 | 753.000000 | 20.390000 | 153.000000 | 365.000000 | 359.000000 |
Ανάγνωση των δεδομένων μιας στήλης σαν pandas Series
# Results for a single column
airbnb['name']
0 96m2, 3BR, 2BA, Metro, WI-FI etc...
1 Athens Quality Apartments - Deluxe Apartment
2 Athens Quality Apartments - Studio
3 AQA-No2 1-bedroom, smart tv, fiber connection,
4 54m2, 1-br, cable tv, wi-fi, metro
...
9668 About love AT015
9669 Superior Queen Room by 33 Solonos suites
9670 2 room sunny modern apartment, top floor + bal...
9671 Διαμέρισμα στην πλατεία Αττικής ,πλησίον του μ...
9672 A.P Athens
Name: name, Length: 9673, dtype: object
Επιλογή συγκεκριμένων στηλών από το dataframe
# results for multiple columns
airbnb[['host_id', 'host_name']]
| host_id | host_name | |
|---|---|---|
| 0 | 37177 | Emmanouil |
| 1 | 37177 | Emmanouil |
| 2 | 37177 | Emmanouil |
| 3 | 37177 | Emmanouil |
| 4 | 37177 | Emmanouil |
| ... | ... | ... |
| 9668 | 428201678 | Fenglin |
| 9669 | 114156592 | Bill & John |
| 9670 | 34801484 | Daria |
| 9671 | 381802767 | Hakob |
| 9672 | 423806621 | Anna |
9673 rows × 2 columns
Επιστροφή του τύπου δεδομένων για όλες τις στήλες
airbnb.dtypes
id int64
name object
host_id int64
host_name object
neighbourhood_group float64
neighbourhood object
latitude float64
longitude float64
room_type object
price int64
minimum_nights int64
number_of_reviews int64
last_review object
reviews_per_month float64
calculated_host_listings_count int64
availability_365 int64
number_of_reviews_ltm int64
license object
dtype: object
Μετατροπή της στήλης last_review σε datetime64 object
airbnb['last_review'] = pd.to_datetime(airbnb['last_review'])
airbnb.dtypes
id int64
name object
host_id int64
host_name object
neighbourhood_group float64
neighbourhood object
latitude float64
longitude float64
room_type object
price int64
minimum_nights int64
number_of_reviews int64
last_review datetime64[ns]
reviews_per_month float64
calculated_host_listings_count int64
availability_365 int64
number_of_reviews_ltm int64
license object
dtype: object
Μπορούμε να εξάγουμε το έτος από ένα datetime object σε μια νέα στήλη. Μετατροπή της στήλης year σε ακέραιο
# extract the year from a datetime series
airbnb['year'] = airbnb['last_review'].dt.year
# to integer
airbnb['year'] = airbnb['year'].astype('UInt16')
airbnb['year'].head()
0 2021
1 2021
2 2021
3 2021
4 2020
Name: year, dtype: UInt16
Το ίδιο μπορούμε να κάνουμε και με τον μήνα.
airbnb['month'] = airbnb['last_review'].dt.month
airbnb['month']=airbnb['month'].astype('UInt16')
airbnb.head()
| id | name | host_id | host_name | neighbourhood_group | neighbourhood | latitude | longitude | room_type | price | minimum_nights | number_of_reviews | last_review | reviews_per_month | calculated_host_listings_count | availability_365 | number_of_reviews_ltm | license | year | month | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 10595 | 96m2, 3BR, 2BA, Metro, WI-FI etc... | 37177 | Emmanouil | NaN | ΑΜΠΕΛΟΚΗΠΟΙ | 37.98863 | 23.76527 | Entire home/apt | 70 | 1 | 32 | 2021-09-24 | 0.25 | 6 | 114 | 7 | 00000957568 | 2021 | 9 |
| 1 | 10990 | Athens Quality Apartments - Deluxe Apartment | 37177 | Emmanouil | NaN | ΑΜΠΕΛΟΚΗΠΟΙ | 37.98903 | 23.76448 | Entire home/apt | 50 | 1 | 54 | 2021-11-01 | 0.48 | 6 | 364 | 10 | 00001070920 | 2021 | 11 |
| 2 | 10993 | Athens Quality Apartments - Studio | 37177 | Emmanouil | NaN | ΑΜΠΕΛΟΚΗΠΟΙ | 37.98888 | 23.76473 | Entire home/apt | 38 | 1 | 76 | 2021-12-09 | 0.67 | 6 | 312 | 22 | 00000957080 | 2021 | 12 |
| 3 | 10995 | AQA-No2 1-bedroom, smart tv, fiber connection, | 37177 | Emmanouil | NaN | ΑΜΠΕΛΟΚΗΠΟΙ | 37.98903 | 23.76448 | Entire home/apt | 48 | 1 | 27 | 2021-11-08 | 0.19 | 6 | 236 | 4 | 00000957422 | 2021 | 11 |
| 4 | 27262 | 54m2, 1-br, cable tv, wi-fi, metro | 37177 | Emmanouil | NaN | ΑΜΠΕΛΟΚΗΠΟΙ | 37.98924 | 23.76500 | Entire home/apt | 52 | 1 | 17 | 2020-01-08 | 0.15 | 6 | 176 | 0 | 00000957579 | 2020 | 1 |
Αν κάποια στήλη περιέχει κενά στην αρχή ή το τέλος της μπορούμε να τα αφαιρέσουμε ως εξής:
airbnb['name'] = airbnb['name'].str.strip()
airbnb['name'].head()
0 96m2, 3BR, 2BA, Metro, WI-FI etc...
1 Athens Quality Apartments - Deluxe Apartment
2 Athens Quality Apartments - Studio
3 AQA-No2 1-bedroom, smart tv, fiber connection,
4 54m2, 1-br, cable tv, wi-fi, metro
Name: name, dtype: object
Μετατροπή όλων των χαρακτήρων μιας στήλης σε πεζά:
airbnb['name_lower'] = airbnb['name'].str.lower()
airbnb['name_lower'].head()
0 96m2, 3br, 2ba, metro, wi-fi etc...
1 athens quality apartments - deluxe apartment
2 athens quality apartments - studio
3 aqa-no2 1-bedroom, smart tv, fiber connection,
4 54m2, 1-br, cable tv, wi-fi, metro
Name: name_lower, dtype: object
Δημιουργία μιας στήλης που στηρίζεται σε υπολογισμό μεταξύ άλλων στηλών (calculated column)
airbnb['min_revenue'] = airbnb['minimum_nights'] * airbnb['price']
airbnb[['minimum_nights', 'price', 'min_revenue']]
| minimum_nights | price | min_revenue | |
|---|---|---|---|
| 0 | 1 | 70 | 70 |
| 1 | 1 | 50 | 50 |
| 2 | 1 | 38 | 38 |
| 3 | 1 | 48 | 48 |
| 4 | 1 | 52 | 52 |
| ... | ... | ... | ... |
| 9668 | 2 | 40 | 80 |
| 9669 | 1 | 110 | 110 |
| 9670 | 4 | 33 | 132 |
| 9671 | 1 | 32 | 32 |
| 9672 | 1 | 40 | 40 |
9673 rows × 3 columns
Υπολογισμός του μέσου όρου μιας στήλης
airbnb['price'].mean()
86.91285020159206
Υπολογισμός του διαμέσου μιας στήλης
airbnb['price'].median()
50.0
Υπολογισμό μέσου όρου τιμής ανά τύπο δωματίου
airbnb[['room_type', 'price']].groupby('room_type', as_index=False).mean()
| room_type | price | |
|---|---|---|
| 0 | Entire home/apt | 84.221882 |
| 1 | Hotel room | 188.514706 |
| 2 | Private room | 100.025054 |
| 3 | Shared room | 61.857143 |
Υπολογισμό διαμέσου τιμής ανά τύπο δωματίου. Χρησιμοποιούμε την στήλη room_type σαν index
airbnb[['room_type', 'price']].groupby('room_type', as_index=True).median()
| price | |
|---|---|
| room_type | |
| Entire home/apt | 51.0 |
| Hotel room | 105.0 |
| Private room | 38.0 |
| Shared room | 14.0 |
Υπολογισμό διαμέσου τιμής ανά τύπο δωματίου και έτος
airbnb[['room_type', 'year', 'price']].groupby(['room_type', 'year'], as_index=False).mean()
| room_type | year | price | |
|---|---|---|---|
| 0 | Entire home/apt | 2013 | 133.000000 |
| 1 | Entire home/apt | 2014 | 89.666667 |
| 2 | Entire home/apt | 2015 | 63.500000 |
| 3 | Entire home/apt | 2016 | 90.432432 |
| 4 | Entire home/apt | 2017 | 92.000000 |
| 5 | Entire home/apt | 2018 | 90.602094 |
| 6 | Entire home/apt | 2019 | 111.112040 |
| 7 | Entire home/apt | 2020 | 74.048780 |
| 8 | Entire home/apt | 2021 | 69.686602 |
| 9 | Hotel room | 2017 | 116.333333 |
| 10 | Hotel room | 2018 | 96.800000 |
| 11 | Hotel room | 2019 | 610.882353 |
| 12 | Hotel room | 2020 | 115.600000 |
| 13 | Hotel room | 2021 | 108.051282 |
| 14 | Private room | 2015 | 160.000000 |
| 15 | Private room | 2016 | 51.285714 |
| 16 | Private room | 2017 | 67.000000 |
| 17 | Private room | 2018 | 55.966667 |
| 18 | Private room | 2019 | 53.809524 |
| 19 | Private room | 2020 | 124.762712 |
| 20 | Private room | 2021 | 43.755376 |
| 21 | Shared room | 2017 | 42.000000 |
| 22 | Shared room | 2019 | 257.500000 |
| 23 | Shared room | 2020 | 391.666667 |
| 24 | Shared room | 2021 | 12.952381 |
Φιλτράρισμα γραμμών με βάση ένα κριτήριο (τιμή <1000) και προσάρτηση σε ένα νέο dataframe
# get all rows with price < 1000
airbnb_under_1000 = airbnb[airbnb['price'] < 1000]
airbnb_under_1000.head()
| id | name | host_id | host_name | neighbourhood_group | neighbourhood | latitude | longitude | room_type | price | ... | last_review | reviews_per_month | calculated_host_listings_count | availability_365 | number_of_reviews_ltm | license | year | month | name_lower | min_revenue | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 10595 | 96m2, 3BR, 2BA, Metro, WI-FI etc... | 37177 | Emmanouil | NaN | ΑΜΠΕΛΟΚΗΠΟΙ | 37.98863 | 23.76527 | Entire home/apt | 70 | ... | 2021-09-24 | 0.25 | 6 | 114 | 7 | 00000957568 | 2021 | 9 | 96m2, 3br, 2ba, metro, wi-fi etc... | 70 |
| 1 | 10990 | Athens Quality Apartments - Deluxe Apartment | 37177 | Emmanouil | NaN | ΑΜΠΕΛΟΚΗΠΟΙ | 37.98903 | 23.76448 | Entire home/apt | 50 | ... | 2021-11-01 | 0.48 | 6 | 364 | 10 | 00001070920 | 2021 | 11 | athens quality apartments - deluxe apartment | 50 |
| 2 | 10993 | Athens Quality Apartments - Studio | 37177 | Emmanouil | NaN | ΑΜΠΕΛΟΚΗΠΟΙ | 37.98888 | 23.76473 | Entire home/apt | 38 | ... | 2021-12-09 | 0.67 | 6 | 312 | 22 | 00000957080 | 2021 | 12 | athens quality apartments - studio | 38 |
| 3 | 10995 | AQA-No2 1-bedroom, smart tv, fiber connection, | 37177 | Emmanouil | NaN | ΑΜΠΕΛΟΚΗΠΟΙ | 37.98903 | 23.76448 | Entire home/apt | 48 | ... | 2021-11-08 | 0.19 | 6 | 236 | 4 | 00000957422 | 2021 | 11 | aqa-no2 1-bedroom, smart tv, fiber connection, | 48 |
| 4 | 27262 | 54m2, 1-br, cable tv, wi-fi, metro | 37177 | Emmanouil | NaN | ΑΜΠΕΛΟΚΗΠΟΙ | 37.98924 | 23.76500 | Entire home/apt | 52 | ... | 2020-01-08 | 0.15 | 6 | 176 | 0 | 00000957579 | 2020 | 1 | 54m2, 1-br, cable tv, wi-fi, metro | 52 |
5 rows × 22 columns
Φιλτράρισμα με πολλαπλά κριτήρια (τιμή <1000 και έτος 2020)
# get all rows with price < 1000 and year equal to 2020
airbnb_2019_under_1000 = airbnb[(airbnb['price'] < 1000) & (airbnb['year'] == 2020)]
airbnb_2019_under_1000.head()
| id | name | host_id | host_name | neighbourhood_group | neighbourhood | latitude | longitude | room_type | price | ... | last_review | reviews_per_month | calculated_host_listings_count | availability_365 | number_of_reviews_ltm | license | year | month | name_lower | min_revenue | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 4 | 27262 | 54m2, 1-br, cable tv, wi-fi, metro | 37177 | Emmanouil | NaN | ΑΜΠΕΛΟΚΗΠΟΙ | 37.98924 | 23.76500 | Entire home/apt | 52 | ... | 2020-01-08 | 0.15 | 6 | 176 | 0 | 00000957579 | 2020 | 1 | 54m2, 1-br, cable tv, wi-fi, metro | 52 |
| 18 | 138386 | Apartment Dora , Service with style | 675611 | Yavor | NaN | ΠΑΓΚΡΑΤΙ | 37.96783 | 23.74970 | Entire home/apt | 58 | ... | 2020-01-20 | 0.47 | 1 | 52 | 0 | 00000208960 | 2020 | 1 | apartment dora , service with style | 174 |
| 30 | 281158 | Center 1, Metro 30m, Satelite TV | 640163 | Nikos | NaN | ΠΛΑΤΕΙΑ ΑΤΤΙΚΗΣ | 37.99253 | 23.73115 | Entire home/apt | 45 | ... | 2020-02-29 | 0.48 | 9 | 144 | 0 | 00000251837 | 2020 | 2 | center 1, metro 30m, satelite tv | 90 |
| 41 | 469140 | Our first love #01 | Thiseio Residencies | 2289590 | Live In Athens | NaN | ΘΗΣΕΙΟ | 37.97665 | 23.71850 | Entire home/apt | 89 | ... | 2020-11-02 | 0.51 | 13 | 301 | 0 | 00000546911 | 2020 | 11 | our first love #01 | thiseio residencies | 178 |
| 42 | 470219 | Our Playground #02 | Thiseio Residencies | 2289590 | Live In Athens | NaN | ΘΗΣΕΙΟ | 37.97525 | 23.71957 | Entire home/apt | 64 | ... | 2020-10-12 | 0.15 | 13 | 251 | 0 | 00001176980 | 2020 | 10 | our playground #02 | thiseio residencies | 64000 |
5 rows × 22 columns
Ιστόγραμμα για την στήλη price στον πίνακα airbnb_under_1000
ax = airbnb_under_1000['price'].plot.hist(bins=40)
Βιβλιογραφία¶
pandas Tutorial for Beginners, https://www.datacamp.com/tutorial/pandas, Πρόσβαση: 18/05/2022
Reading and Writing CSV Files in Python, https://realpython.com/python-csv/#reading-csv-files-with-csv, Πρόσβαση: 18/05/2022
Reading CSV files in Python, https://www.programiz.com/python-programming/reading-csv-files, Πρόσβαση: 18/05/2022
COVID-19 Coronavirus Pandemic, https://www.kaggle.com/datasets/rinichristy/covid19-coronavirus-pandemic, Πρόσβαση: 18/05/2022 Pandas User Guide, https://pandas.pydata.org/docs/user_guide/index.html#user-guide, Πρόσβαση: 23/05/2022
McKinney, W., 2013. Python for data analysis. O’Reilly, Beijing.
9. Γεωεπεξεργασία διανυσματικών δεδομένων¶
Ο χώρος και οι γεωμετρικές δομές του μπορούν να αναπαρασταθούν μέσω διανυσματικών δεδομένων (Vector). Οι τρείς βασικές δομές δεδομένων είναι:
Τα σημεία
Οι γραμμές
Τα πολύγωνα

Επιπλέον αυτά τα γεωμετρικά δεδομένα συνοδεύονται και απο περιγραφικά δεδομένα που αφορούν τις ιδιότητες ή τα χαρακτηριστικά αυτών των δεδομένων.

Στα Σ.Γ.Π. ο πιο συνηθισμένος τύπος αρχείων αποθήκευσης αυτών των δεδομένων είναι το shapefile. Πλέον έχουν αναπτυχθεί και άλλοι τύποι όπως geojson, geopackage και χωρικές βάσεις (geodatabases) όπως η Postgresql/Postgis.
Ο προσδιορισμός της γεωγραφικής θέσης στην υδρόγειο γίνεται μέσω ενός ζεύγους γεωγραφικών συντεταγμένων. Κάθε σημείο στον χώρο προσδιορίζεται γεωγραφικά από το γεωγραφικό μήκος (λ) και το γεωγραφικό πλάτος (φ).

Για να αποδοθεί η τρισδιάστατη υδρόγειος σφαίρα σε ένα δυσδιάστατο σύστημα αναφορά χρησιμοποιείται ένα προβολικό σύστημα.

Κάθε προβολικό σύστημα της σφαίρας στο επίπεδο εισάγει μια σειρά παραμορφώσεων που αφορά το σχήμα των γεωμετρικών δομών, την κλίμακα, την έκταση και τις αποστάσεις. Ανάλογα το προβολικό σύστημα κάποιες από τις παραπάνω παραμορφώσεις εμφανίζονται σε μεγάλο βαθμό και άλλες όχι. Οπότε ανάλογα το είδος της έρευνας ο ερευνητής οφείλει να γνωρίζειπαραμορφώσεις εισάγει η κάθε προβολή και ανάλογα να επιλέγει την προβολή με τα λιγότερα σφάλματα.
Python βιβλιοθήκες για διανυσματικά δεδομένα¶
Για την ανάγνωση, εγγραφή, επεξεργασία διανυσματικών δεδομένων στην Python έχουν καθιερωθεί μια σειρά βιβλιοθηκών. Η αρχαιότερη και βασική βιβλιοθήκη είναι η GDAL/OGR. Επειδή η βιβλιοθήκη δεν είναι ιδιαίτερα συμβατή σε σχέση με τον τρόπο συγγραφής της Python και επιρρεπής σε σφάλματα έχουν αναπτυχθεί πιο σύγχρονες βιβλιοθήκες όπως η βιβλιοθήκη [Fiona] που είναι ιδιαίτερα χρήσιμη για την ανάγνωση/εγγραφή διανυσματικών δεδομένων Fiona και η βιβλιοθήκη Shapely η οποία χρησιμοποιείται για την επεξεργασία και ανάλυση.
Η βιβλιοθήκη Shapely¶
shapely from WKT¶
Μπορούμε να δημιουργήσουμε αντικείμενα shapely που αναπαριστούν σημεία ή γραμμές ή πολύγωνα μέσω WKT. Η γλώσσα (https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry)[WKT] είναι μια ειδική διάλεκτος για την περιγραφή διανυσματικών αντικειμένων. Εισάγουμε τις απαραίτητες υπο-βιβλιοθήκες (geometry και wkt) από την βιβλιοθήκη shapely.
import shapely.geometry
import shapely.wkt
Πολύγωνα¶
Καλούμε την μέθοδο shapely.wkt.loads() για να δημιουργήσουμε shapely objects από wkt
pol1 = shapely.wkt.loads("POLYGON ((0 0, 0 -1, 7.5 -1, 7.5 0, 0 0))")
pol1
Η εκτύπωση του shapely αντικειμένου επιστρέφει μία περιγραφή σε μορφή WKT.
print(pol1)
POLYGON ((0 0, 0 -1, 7.5 -1, 7.5 0, 0 0))
Εκτύπωση του τύπου του αντικειμένου pol1
type(pol1)
shapely.geometry.polygon.Polygon
pol2 = shapely.wkt.loads("POLYGON ((0 1, 1 0, 2 0.5, 3 0, 4 0, 5 0.5, 6 -0.5, 7 -0.5, 7 1, 0 1))")
print(pol2)
POLYGON ((0 1, 1 0, 2 0.5, 3 0, 4 0, 5 0.5, 6 -0.5, 7 -0.5, 7 1, 0 1))
pol2
Δημιουργία MultiPolygon shapely object από αντίστοιχη συλλογή πολυγώνων MULTIPOLYGON
pol3 = shapely.wkt.loads("""
MULTIPOLYGON
(((40 40, 20 45, 45 30, 40 40)),
((20 35, 10 30, 10 10, 30 5, 45 20, 20 35), (30 20, 20 15, 20 25, 30 20)))
""")
type(pol3)
shapely.geometry.multipolygon.MultiPolygon
pol3
type(pol3)
shapely.geometry.multipolygon.MultiPolygon
Σημεία¶
pnt1 = shapely.wkt.loads("""
POINT (30 10)
""")
pnt1
Συλλογή σημείων
pnt2 = shapely.wkt.loads("""
MULTIPOINT(0 0,1 1)
""")
pnt2
Γραμμές¶
line1 =shapely.wkt.loads("""
LINESTRING(1.5 2.45,3.21 4)
""")
line1
Συλλογή γραμμών
line2 =shapely.wkt.loads("""
MULTILINESTRING((0 0,-1 -2,-3 -4, -3 -8),(2 3,3 4,6 7))
""")
line2
Shapely μέσω συναρτήσεων¶
from shapely.geometry import Point, LineString, Polygon, MultiPoint, MultiLineString, MultiPolygon
Κάθε συνάρτηση λαμβάνει διαφορετικά ορίσματα ανάλογα με την συνάρτηση.
Στην συνέχεια ακολουθεί η δημιουργία ενός αντικειμένου shapely γεωμετρία σημείου.
pnt1 = shapely.geometry.Point((2, 0.5))
pnt1
Για την δημιουργία συλλογής σημείων multipoint δίνουμε σαν όρισμα στην συνάρτηση shapely.geometry.MultiPoint μία λίστα από πλειάδες (tuples). Η κάθε πλειάδα (x,y)αντιστοιχεί στις συντεταγμένες ενός σημείου.
coords = [(2, 0.5), (1, 1), (-1, 0), (1, 0)]
pnt2 = shapely.geometry.MultiPoint(coords)
pnt2
Για την δημιουργία γραμμών χρησιμοποιείται πάλι μία λίστα από tuples που περιγράφουν τις κορυφές της γραμμής. Στο παρακάτω παράδειγμα χρησιμοποιούμαι την προηγούμενη πλειάδα αλλά πλέον χρησιμοποιούμε την μέθοδο shapely.geometry.LineString για την δημιουργία γραμμής και όχι την μέθοδο hapely.geometry.MultiPoint που δημιουργεί συλλογές σημείων.
line1 = shapely.geometry.LineString(coords)
line1
Κατασκεύη γραμμής από Point Objects:
p1 = shapely.wkt.loads("POINT (0 0)")
p2 = shapely.wkt.loads("POINT (1 1)")
p3 = shapely.wkt.loads("POINT (2 -1)")
p4 = shapely.wkt.loads("POINT (2.5 2)")
p5 = shapely.wkt.loads("POINT (1 -1)")
shapely.geometry.LineString([p1, p2, p3, p4, p5])
Αντίστοιχα μπορούμε να δημιουργήσουμε συλλογές γραμμών.
Δημιουργούμε ξεχωριστά αντικείμενα γραμμών shapely και στην συνέχεια καλούμε την συνάρτηση shapely.geometry.MultiLineString όπου ορίζουμε σαν όρισμα μια λίστα με τις μεμονωμένες γραμμές.
l1 = shapely.geometry.LineString([(2, 0.5), (1, 1), (-1, 0), (1, -1)])
l2 = shapely.geometry.LineString([(-2, 1), (2, -0.5), (3, 1)])
line2 = shapely.geometry.MultiLineString([l1, l2])
line2
Αντίστοιχα δημιουργούμε πολυγωνικά αντικείμενα μέσω μια λίστας με πλειάδες σημείων που χρησιμοποιείται σαν όρισμα στην συνάρτηση shapely.geometry.Polygon
coords = [(0, 0), (0, -1), (7.5, -1), [7.5, 0], (0, 0)]
shapely.geometry.Polygon(coords)
Αν θέλουμε μπορούμε να περάσουμε μία δεύτερη λίστα η οποία περιλαμβανει επιμέρους λίστες με πλειάδες σημείων τα οποία περιγράφουν τρύπες μέσα στο πολύγωνο.
coords_exterior = [(0, 0), (0, -1), (7.5, -1), [7.5, 0], (0, 0)]
coords_interiors = [[(0.4, -0.3), (5, -0.3), (5, -0.7), (0.4, -0.7), (0.4, -0.7)]]
shapely.geometry.Polygon(coords_exterior, coords_interiors)
Με την συνάρτηση shapely.geometry.MultiPolygon δημιουργούμε αντίστοιχα συλλογές πολυγώνων από μεμονωμένα αντικείμενα shapely.geometry.polygon.Polygon
multipolygon1 = shapely.geometry.MultiPolygon([pol2, pol3])
multipolygon1
/home/leonidas/anaconda3/envs/book/lib/python3.10/site-packages/shapely/geometry/multipolygon.py:202: ShapelyDeprecationWarning: __getitem__ for multi-part geometries is deprecated and will be removed in Shapely 2.0. Use the `geoms` property to access the constituent parts of a multi-part geometry.
shell = ob[0]
/home/leonidas/anaconda3/envs/book/lib/python3.10/site-packages/shapely/geometry/multipolygon.py:203: ShapelyDeprecationWarning: __getitem__ for multi-part geometries is deprecated and will be removed in Shapely 2.0. Use the `geoms` property to access the constituent parts of a multi-part geometry.
holes = ob[1]
print(multipolygon1)
MULTIPOLYGON (((0 1, 1 0, 2 0.5, 3 0, 4 0, 5 0.5, 6 -0.5, 7 -0.5, 7 1, 0 1)), ((40 40, 20 45, 45 30, 40 40)))
Σύμφωνα με τις προδιαγραφές simple features το παραπάνω object δεν είναι έγκυρο γιατί ένα πολύγωνο τέμνει ένα άλλο σε άπειρο αριθμό σημείων. Μπορούμε να ελέγξουμε την εγκυρότητα ενός αντικειμένου με την κλήση τις ιδιότητας is_valid. Επίσης κατά την οπτικοποίηση στο προηγούμενο βήμα του αντικειμένου multipolygon1 αυτό εμφανίζεται με κόκκινο (αντί για πράσινο). Ένδειξη ότι δεν ειναι valid.
multipolygon1.is_valid
True
Ταυτόχρονα μπορούμε να φτιάξουμε σύνθετες συλλογές από επιμέρους αντικείμενα shapely.
geo_collection = shapely.geometry.GeometryCollection([multipolygon1,line2,pnt1])
geo_collection
Shapely μέσω shape¶
Μπορούμε να δημιουργήσουμε αντικείμενα shapely μέσω της συνάρτησης shapely.geometry.shape η οποία δέχεται σαν όρισμα ένα λεξικό μορφής GEOJSON το οποίο πρέπει να έχει τις εξής δύο ιδιότητες.
Την ιδιότητα
"type"που περιγράφει τον τύπο γεωμετρίαςΤην ιδιότητα
"coordinates"που περιγράφει τις γεωμετρίες και τις συντεταγμένες τους σαν λίστες ή πλειάδες.
d = {"type": "Point", "coordinates": (0, 1)}
shapely.geometry.shape(d)
Δημιουργία αντικειμένου MultiPolygon μέσω GEOJSON λεξικού:
d = {
"type": "MultiPolygon",
"coordinates": [
[
[[40, 40], [20, 45], [45, 30], [40, 40]]
],
[
[[20, 35], [10, 30], [10, 10], [30, 5], [45, 20],
[20, 35]],
[[30, 20], [20, 15], [20, 25], [30, 20]]
]
]
}
pol3 = shapely.geometry.shape(d)
pol3
Γεωμετρικός τύπος δεδομένων¶
H ιδιότητα .geom_type ενός αντικειμένου shapely περιγράφει τον γεωμετρικό τύπο της:
pol1.geom_type
'Polygon'
line1.geom_type
'LineString'
geo_collection.geom_type
Συντεταγμένες¶
Για να ανακτήσουμε τις συντεταγμένες ενός shapely αντικειμένου καλούμε με διαφορετικό τρόπο τις ανάλογες συναρτήσεις ανάλογα την πολυπλοκότητα του κάθε τύπου.
Για ένα Point object καλούμε άμεσα την ιδιότητα coords η οποία επιστρέφει ένα shapely.coords.CoordinateSequence object.
pnt1.coords
<shapely.coords.CoordinateSequence at 0x7f428cc9bc40>
Μπορούμε να λάβουμε ως λίστα τις πλειάδες συντεταγμένων που το απαρτίζουν
list(pnt1.coords)
[(2.0, 0.5)]
Αντίστοιχα για γραμμή
list(line1.coords)
[(2.0, 0.5), (1.0, 1.0), (-1.0, 0.0), (1.0, 0.0)]
Για να ελέγξουμε σε ένα αντικείμενο συλλογών γεωμετρίας (MultiPoint, MultiPolygon κτλ) πόσες επιμέρους γεωμετρίες περιλαμβάνει:
len(line2.geoms)
2
Για να λάβουμε το πρώτο αντικείμενο γεωμετρίας:
line2.geoms[0]
type(line2.geoms[0])
shapely.geometry.linestring.LineString
line2.geoms[0].geom_type
'LineString'
Και λαμβάνουμε τις συντεταγμένες της πρώτης γεωμετρίας:
list(line2.geoms[0].coords)
[(2.0, 0.5), (1.0, 1.0), (-1.0, 0.0), (1.0, -1.0)]
ή της δεύτερης
list(line2.geoms[1].coords)
[(-2.0, 1.0), (2.0, -0.5), (3.0, 1.0)]
Για τα πολύγωνα ακολουθούμε διαφορετική προσέγγιση. Ένα πολύγωνο αποτελεί από το εξωτερικό περίγραμμα (exterior) ή και ένα ή περισσότερα περιγράμματα εσωτερικών τρυπών (interiors). Κατά συνέπεια έχουμε συντεταγμένες που περιγράφουν το κάθε περίγραμμα.
Το εξωτερικό περίγραμμα του pol1 αντικειμένου:
pol1.exterior
Και οι συντεταγμένες του:
list(pol1.exterior.coords)
[(0.0, 0.0), (0.0, -1.0), (7.5, -1.0), (7.5, 0.0), (0.0, 0.0)]
Το pol1 όμως δεν έχει εσωτερικές τρύπες γι αυτό και το παρακάτω επιστρέφει μηδέν.
len(pol1.interiors)
0
Έστω το παρακάτω MultiPolygon object που δημιουργήσαμε σε προηγούμενο στάδιο.
pol3
Περιλαμβάνει δύο ξεχωριστά γεωμετρικά αντικείμενα:
len(pol3.geoms)
2
Ας πάρουμε το πρώτο:
pol3.geoms[0]
Δεν περιλαμβάνει καμία τρύπα στο εσωτερικό του. Ας πάρουμε τις συντεταγμένες από το περίγραμμά του (exterior)
pol3.geoms[0].exterior.coords
<shapely.coords.CoordinateSequence at 0x7f428cc9bd90>
Και ας τις επιστρέψουμε σαν λίστα πλειάδων από ζεύγη της μορφής (x,y)
list(pol3.geoms[0].exterior.coords)
[(40.0, 40.0), (20.0, 45.0), (45.0, 30.0), (40.0, 40.0)]
Ας δοκιμάσουμε το δεύτερο αντικείμενο γεωμετρίας. Ας το δούμε:
pol3.geoms[1]
Λαμβάνουμε τις συντεταγμένες του εξωτερικού περιγράμματος:
list(pol3.geoms[1].exterior.coords)
[(20.0, 35.0),
(10.0, 30.0),
(10.0, 10.0),
(30.0, 5.0),
(45.0, 20.0),
(20.0, 35.0)]
Ας δούμε πόσες τρύπες έχει στο εσωτερικό του:
len(pol3.geoms[1].interiors)
1
Παίρνουμε το περίγραμμα της τρύπας
pol3.geoms[1].interiors[0]
Και τις συντεταγμένες της
list(pol3.geoms[1].interiors[0].coords)
[(30.0, 20.0), (20.0, 15.0), (20.0, 25.0), (30.0, 20.0)]
Ιδιότητες αντικειμένων¶
Υπολογισμός ορίων (bounds)¶
geo_collection
geo_collection.bounds
(-2.0, -1.0, 45.0, 45.0)
shapely.geometry.box(*geo_collection.bounds)
line1
line1.bounds
(-1.0, 0.0, 2.0, 1.0)
pnt1
pnt1.bounds
(2.0, 0.5, 2.0, 0.5)
list(pnt1.coords)
[(2.0, 0.5)]
Νέες γεωμετρίες¶
Κεντροειδές πολυγώνου (centroid)¶
pol2
pol2.centroid
shapely.geometry.GeometryCollection([pol2, pol2.centroid])
Περιμετρική ζώνη (buffer)¶
pnt1.buffer(5)
shapely.geometry.GeometryCollection([pnt1,pnt1.buffer(5)])
pol1.buffer(5)
shapely.geometry.GeometryCollection([pnt1,pnt1.buffer(5)])
Σχέσεις μεταξύ αντικειμένων¶
shapely.geometry.GeometryCollection([pol1,pol3])
pol1.intersects(pol3)
False
pol1.intersects(pol2)
True
shapely.geometry.GeometryCollection([pol1,pol2])
Γεωμετρικές πράξεις¶
x = shapely.geometry.Point((0, 0)).buffer(1)
y = shapely.geometry.Point((1, 0)).buffer(1)
shapely.geometry.GeometryCollection([x, y])
x.intersection(y)
x.difference(y)
x.union(y)
pol1.union(pol2)
Υπολογισμός απόστασης ανάμεσα σε δύο αντικείμενα
shapely.geometry.GeometryCollection([pol1, pol3])
pol1.distance(pol3)
10.307764064044152
pol3.distance(pol1)
10.307764064044152
import pyproj
from shapely.geometry import Point
from shapely.ops import transform
wgs84_pt = Point(39.35858398397631, 22.932070043920394)
wgs84 = pyproj.CRS('EPSG:4326')
greek_grid = pyproj.CRS('EPSG:2100')
project = pyproj.Transformer.from_crs(wgs84, greek_grid, always_xy=True).transform
projected_point = transform(project, wgs84_pt)
print(projected_point)
POINT (2087909.8290560723 2620022.621513317)
import folium
coords = list(wgs84_pt.coords)[0]
#Create the map
my_map = folium.Map(location = coords, zoom_start = 13)
# Add marker
folium.Marker(coords, popup = 'Volos').add_to(my_map)
#Display the map
my_map
Η βιβλιοθήκη Geopandas¶
Μέχρι τώρα είδαμε πως μπορούμε να διαχειριζόμαστε γεωμετρικά δεδομένα με την βιβλιοθήκη shapely.
Όμως τα γεωγραφικά δεδομένα δεν περιλαμβάνουν μόνο της γεωγραφική πληροφορία και την γεωμετρική τους δομή αλλά συνοδεύονται από μια σειρά περιγραφικών δεδομένων.
Η βιβλιοθήκη geopandas είναι μια βιβλιοθήκη της Python η οποία υποστηρίζει την ανάγνωση, επεξεργασία, ανάλυση και εγγραφή γεωγραφικών και παράλληλα περιγραφικών δεδομένων. Αποτελεί επέκταση της βιβλιοθήκης pandas και «κληρονομεί» τα χαρακτηριστικά και τις δυνατότητές της.
Στην υφιστάμενη δομή της pandas, η geopandas υποστηρίζει την γεωμετρία με την προσθήκη μιας νέας στήλης και το γεωγραφικό σύστημα αναφοράς.
Εισάγουμε την βιβλιοθήκη με τον παρακάτω τρόπο
import geopandas as gpd
Για να διαβάσουμε ένα αρχείο shapefile χρησιμοποιούμε την συνάρτηση gpd.read_file. Το αντικείμενο που προκύπτει είναι τύπου geopandas.geodataframe.GeoDataFrame
# Import shapefile using geopandas
dhmoi = gpd.read_file("../docs/dhmoi.gpkg")
type(dhmoi)
geopandas.geodataframe.GeoDataFrame
Η στήλη της γεωμετρίας ονομάζεται προκαθορισμένα geometry και είναι αντικείμενο geopandas.geoseries.GeoSeries που περιλαμβάνει αντικείμενα shapely.
type(dhmoi["geometry"])
geopandas.geoseries.GeoSeries
Με την μέθοδο geom_type μπορούμε να δούμε τον γεωμετρικό τύπο κάθε εγγραφής.
dhmoi.geom_type
0 MultiPolygon
1 MultiPolygon
2 MultiPolygon
3 MultiPolygon
4 MultiPolygon
...
320 MultiPolygon
321 MultiPolygon
322 MultiPolygon
323 MultiPolygon
324 MultiPolygon
Length: 325, dtype: object
Ας δούμε τις αρχικές εγγραφές του αρχείου
dhmoi.head()
| OBJECTID | X | Y | Name | CodeELSTAT | PopM01 | PopF01 | PopTot01 | UnemrM01 | UnemrF01 | UnemrT01 | PrSect01 | Foreig01 | Income01 | Perif | geometry | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 1 | 616259.007833 | 4.551127e+06 | KOMOTINIS | 0101 | 29967.0 | 31534.0 | 61501.0 | 4.726948 | 6.051873 | 5.221281 | 21.817852 | 1.996780 | 10969.315256 | 1 | MULTIPOLYGON (((631058.735 4574912.809, 631431... |
| 1 | 2 | 644783.135624 | 4.561364e+06 | ARRIANON | 0102 | 8952.0 | 9307.0 | 18259.0 | 1.955813 | 2.390181 | 2.154240 | 92.912436 | 0.038337 | 6398.641486 | 1 | MULTIPOLYGON (((661976.597 4554253.076, 662118... |
| 2 | 3 | 602100.950461 | 4.555689e+06 | IASMOU | 0103 | 7290.0 | 7561.0 | 14851.0 | 5.653884 | 6.671554 | 6.062390 | 70.206767 | 1.339977 | 6608.897469 | 1 | MULTIPOLYGON (((603623.489 4566376.502, 603657... |
| 3 | 4 | 633712.468442 | 4.539548e+06 | MARONEIAS - SAPON | 0104 | 8284.0 | 8342.0 | 16626.0 | 5.840957 | 10.270499 | 7.421934 | 57.748085 | 0.890172 | 6700.375345 | 1 | MULTIPOLYGON (((650998.525 4557469.860, 651446... |
| 4 | 5 | 517831.195188 | 4.572544e+06 | DRAMAS | 0201 | 28041.0 | 29326.0 | 57367.0 | 8.831689 | 14.176926 | 10.851115 | 7.298838 | 2.961633 | 11299.106498 | 2 | MULTIPOLYGON (((521986.700 4601855.354, 522271... |
dhmoi.plot();
Χαρτογραφική απόδοση σε διαδραστικό χάρτη
dhmoi.explore(legend=False)